[PYTHON] LINE Bot hat mir das Scraping-Ergebnis der IT-Trendinformationen gesendet [LINE Messaging API]

Dies ist mein erster Qiita-Beitrag. Wenn Sie einen Fehler machen, können Sie einen harten Ton verwenden. Bitte teilen Sie uns dies in den Kommentaren mit.

Fertiges Produkt

Verwendungszustand 2020-09-04_19h22_23.png

2020-09-04_19h22_04.png

Wie benutzt man

  1. Registrieren Sie sich über den QR-Code.
  2. Geben Sie "Hatena" oder "Kita" ein.
  3. Informationen können erhalten werden.

Hinweis

Ich weiß nicht, wann ich es aus Heroku entfernen soll. In diesem Fall möchte ich, dass Sie es in Ihrer lokalen Umgebung, Raspeye oder Ihrem eigenen Heroku verwenden.

Hintergrund gemacht

Ich gehe zum Informationssystem. Ich habe jedoch nur C-Sprache gemacht und nie Kreationen gemacht. (Ich fand das Programmieren nicht lustig)

Wir entwickeln auch eine Webanwendung mit Django, aber zuerst haben wir den BOT von LINE als etwas ausgewählt, das einfach erstellt werden kann.

Darüber hinaus sammelte KENTA, ein allgemeiner Lebensmittelingenieur, Informationen.

--Hatena Lesezeichen

Sie sagten, dass Sie die Trendspalte wie lesen.

Ich hatte jedoch keine Lust, meinen Computer zu öffnen und die Nachrichten vom Morgen zu überprüfen. Dann wäre es besser, weiter zu programmieren ...

Ich dachte, es wäre gut, es in meiner kleinen Freizeit oder auf Reisen zu überprüfen und später herauszufinden, was für mich nützlich ist, also habe ich es in der tragbaren Leitung ausgefüllt.

Menschen, die nutzen wollen

Ich möchte, dass diese Person es benutzt.

ist. Da es sich um einen BOT der Linie handelt, kann es problemlos verwendet werden, ohne dass die Anwendung unnötig installiert werden muss.

Ihre aktuelle Situation (überspringen)

Entwicklungsumgebung etc.?

Ich werde das zum ersten Mal schreiben.

Dinge notwendig

Zusätzlich zu der oben genannten Entwicklungsumgebung ist eine Registrierung für LINE-Entwickler erforderlich.

Link zu LINE-Entwicklern

Wenn die Registrierung nicht funktioniert, lesen Sie den Artikel unter https://qiita.com/kro/items/67f7510b36945eb9689b.

Code und Kommentar

Ich werde die als Vorlage auf Github verteilte verwenden, die im vorherigen Qiita-Artikel geändert wurde. Es scheint ein Fehler zu sein.

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__)

#Umgebungsvariablen abrufen
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)

Ich werde hier Scraping hinzufügen.

Importieren Sie vorher die Bibliothek

import requests
from bs4 import BeautifulSoup
import os,json

Über das Schaben

Diese Artikel sagen etwas sehr Wichtiges. In Bezug auf die Belastung des Servers ist es gefährlich, wenn der Absender absichtlich eine große Anzahl von Anfragen stellt. Nachdem Sie die Situation beobachtet haben, löschen Sie sie aus Heroku, laden Sie sie für den privaten Gebrauch von Ihrem eigenen Raspberry Pi usw. auf den Server hoch und verwenden Sie sie.

Ich habe es überhaupt nicht monetarisiert und einen Link gepostet, daher sollte es keine Urheberrechtsprobleme geben. Es bedeutet, dass Sie zitieren.

Code

Zuerst über Hatena Bookmark kratzen. Ich konnte ziemlich einfach damit umgehen.

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 = "--[Hatena Lesezeichen]--" + "\n" + "\n".join(h_matome)
    return h_matome_lenear

https://qiita.com/Daara_y/items/c4b01107bc6191b9fbff Ich habe die Form angepasst, während ich mich auf bezog. Es kann nicht hilfreich sein, weil es hart gedrückt wird.

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"])
    """
Hier finden Sie die Funktionen unten.
    pprint(li[1])
    ('{"trend":{"edges":[{"followingLikers":[],"isLikedByViewer":false,"isNewArrival":false,"hasCodeBlock":false,"node":{"createdAt":"2020-09-02T00:39:45Z","likesCount":511,"title":"JavaScript-Lern-Roadmap","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 = []
    #Ich möchte nur den Schlüsselteil namens Knoten, also bekomme ich so viel
    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

Lassen Sie es auch reagieren, wenn Sie das Wort XX als Zeilennachricht erhalten.

@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="Bitte geben Sie "Hatena" oder "Kita" ein, um die Informationen zu erhalten."))

Stellen Sie mit git auf Heroku bereit

Für git werde ich eine Referenzseite veröffentlichen. https://employment.en-japan.com/engineerhub/entry/2017/01/31/110000

Erforderliche Dateien

Befehlszeile

Als nächstes mit Git Bash,

Ich habe es so eingesetzt.

Recommended Posts

LINE Bot hat mir das Scraping-Ergebnis der IT-Trendinformationen gesendet [LINE Messaging API]
[Python] Verwenden der Linien-API [1. Erstellung des Beauty-Bots]
LINE Bot, der Sie über die interessierenden Aktien informiert
[LINE Messaging API] Erstellen Sie einen Papageienrückgabe-BOT mit Python
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können
Web-Scraping-Informationen zu Lachprogrammen und Benachrichtigungen über LINE