[PYTHON] LINE Bot m'a envoyé le résultat du scraping des informations de tendance informatique [LINE Messaging API]

Ceci est mon premier article sur Qiita. Si vous faites une erreur, vous pouvez utiliser un ton dur, alors faites-le nous savoir dans les commentaires.

Produit fini

État d'utilisation 2020-09-04_19h22_23.png

2020-09-04_19h22_04.png

Comment utiliser

  1. Inscrivez-vous à partir du code QR.
  2. Tapez "Hatena" ou "Kita".
  3. Des informations peuvent être obtenues.

Mise en garde

Je ne sais pas quand le supprimer de Heroku. Dans ce cas, j'aimerais que vous l'utilisiez dans votre environnement local, Raspeye, ou votre propre Heroku.

Fond fait

Je vais au système d'information. Cependant, je ne faisais que du langage C et je n'ai jamais fait de créations. (Je n'ai pas trouvé la programmation amusante)

Nous développons également une application Web avec Django, mais nous avons d'abord sélectionné LINE's BOT comme quelque chose qui peut être facilement créé.

De plus, KENTA, un ingénieur général en alimentation, a recueilli des informations.

-Hatena Signet

Vous avez dit que vous lisez la colonne des tendances comme.

Cependant, je n'avais pas envie d'ouvrir mon ordinateur et de vérifier les nouvelles du matin. Alors il vaudrait mieux continuer la programmation ...

J'ai pensé qu'il serait bon de le vérifier dans mon petit temps libre ou en voyage, et de découvrir ce qui m'est utile plus tard, alors je l'ai complété dans le portable LINE.

Les gens qui veulent utiliser

J'aimerais que cette personne l'utilise.

est. Puisqu'il s'agit d'un BOT de la ligne, il peut être utilisé facilement sans qu'il soit nécessaire d'installer inutilement l'application.

Ma situation actuelle (veuillez sauter)

Environnement de développement, etc.?

J'écrirai ceci pour la première fois.

Les choses nécessaires

En plus de l'environnement de développement ci-dessus, l'enregistrement des développeurs LINE est requis.

Lien LINE Developers

Si l'enregistrement ne fonctionne pas, consultez l'article sur https://qiita.com/kro/items/67f7510b36945eb9689b.

Code et commentaire

J'utiliserai celui distribué comme modèle sur Github, modifié dans l'article précédent de Qiita. Il semble y avoir une erreur.

dir_name/main.py

from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import os

app = Flask(__name__)

#Obtenir des variables d'environnement
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))


if __name__ == "__main__":
#    app.run()
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

Je vais ajouter le grattage ici.

Importez la bibliothèque avant cela

import requests
from bs4 import BeautifulSoup
import os,json

À propos du grattage

Ces articles disent quelque chose de très important. En ce qui concerne la charge sur le serveur, il est dangereux si l'expéditeur fait intentionnellement un grand nombre de requêtes. Après avoir observé la situation, supprimez-le de Heroku, téléchargez-le sur le serveur pour un usage privé à partir de votre propre Raspberry Pi, etc., et utilisez-le.

Je ne l'ai pas du tout monétisé et j'ai publié un lien, il ne devrait donc pas y avoir de problèmes de droits d'auteur. Cela signifie que vous citez.

code

Tout d'abord, raclez sur Hatena Bookmark. J'ai pu le gérer de manière assez simple.

def create_h():
    h_matome = []
    title_list = []
    url_list = []
    load_url = "https://b.hatena.ne.jp/hotentry/it"
    html = requests.get(load_url)
    soup = BeautifulSoup(html.content, "html.parser")
    topic = soup.find_all("a", class_="js-keyboard-openable")
    for element in topic[:30]:
        if not element:
            continue
        title_list.append(element.get("title"))
        url_list.append(element.get("href"))
    for (i, j) in zip(title_list, url_list):
        h_matome.append("[title]" + i)
        h_matome.append("[URL]" + j + "\n")
    h_matome_lenear = "--[Signet Hatena]--" + "\n" + "\n".join(h_matome)
    return h_matome_lenear

https://qiita.com/Daara_y/items/c4b01107bc6191b9fbff J'ai ajusté la forme en me référant à. Cela peut ne pas être utile car il est poussé dur.

def create_q():
    load_url = "https://qiita.com/"
    html = requests.get(load_url)
    soup = BeautifulSoup(html.content, "html.parser")
    li = []
    for items in soup.find_all():
        if "data-hyperapp-props" in items.attrs:
            li.append(items["data-hyperapp-props"])
    """
Retrouvez les fonctionnalités ci-dessous.
    pprint(li[1])
    ('{"trend":{"edges":[{"followingLikers":[],"isLikedByViewer":false,"isNewArrival":false,"hasCodeBlock":false,"node":{"createdAt":"2020-09-02T00:39:45Z","likesCount":511,"title":"Feuille de route d'apprentissage JavaScript","uuid":"ae2dbbd34f8557d5af19","author":{"profileImageUrl":"https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335670/profile-images/1598003375","urlName":"yukiji"}}},{"followingLikers":[],"isLikedByViewer":false,"isNewArrival":false,"hasCodeBlock":false,"node":{"createdAt":"2020-09-01T17:29:32Z","likesCount":249,"title":"Masa
    """
    datas = json.loads(li[1])
    result = []
    #Je ne veux que la partie clé appelée node, donc j'obtiens autant
    for edges in datas['trend']['edges']:
        result.append(edges['node'])
    q_matome = []
    for v in result[:20]:
        q_matome.append('[title]:' + v['title'] )
        q_matome.append('[URL]:' + load_url + v['author']['urlName'] + "/items/" + v['uuid'] +  '\n')
    q_matome_lenear = "--【Qiita】--" + "\n\n" + "\n".join(q_matome)
    return q_matome_lenear

Faites-le également réagir lorsque vous recevez le mot XX en tant que message de ligne.

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    res1 = create_h()
    res2 = create_q()
    if event.type == "message":
        if event.message.text == "Hatena":
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text=res1))
        elif event.message.text == "Kita":
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text=res2))
        else:
            line_bot_api.reply_message(
                event.reply_token,
                TextSendMessage(text="Entrez "Hatena" ou "Kita" pour recevoir les informations."))

Déployer avec git sur Heroku

Pour git, je publierai un site de référence. https://employment.en-japan.com/engineerhub/entry/2017/01/31/110000

Fichiers requis

Ligne de commande

Ensuite, en utilisant git Bash,

Je l'ai déployé comme ça.

Recommended Posts

LINE Bot m'a envoyé le résultat du scraping des informations de tendance informatique [LINE Messaging API]
[Python] Utilisation de l'API Line [1ère création de Beauty Bot]
LINE Bot qui vous informe des stocks d'intérêt
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
Informations de raclage Web sur les programmes de rire et notification en ligne