Linebot-Erstellung und Dateifreigabe mit Python

Einführung

Ich möchte vorstellen, wie die Dropbox-API in Python verwendet wird und wie Linebot eine Dateiübertragungsfunktion hinzugefügt wird. Dieses Mal erstellen wir einen Linebot, der Ihnen monatliche Kalenderbilder über Dropbox sendet.

↓ So. Linebot参照.jpg

In Bezug auf die Erstellung von Linebot selbst gibt es viele nützliche Websites, daher werde ich sie hier weglassen.

Ich habe LINE Bot mit Python gestartet [Bis Sie den LINE-Bot mit Flask implementieren und für Heroku bereitstellen] (https://qiita.com/suigin/items/0deb9451f45e351acf92)

Was brauchst du?

Sprache: Python 3.7.4 Bibliothek (Linebot): Flask 1.1.1, line-bot-sdk 1.16.0, Bibliothek (Dropbox): Dropbox 9.5.0

Bibliotheksinstallation

Installieren Sie mit den folgenden drei Pip-Befehlen.

pip install Flask
pip install line-bot-sdk
pip install dropbox

Es ist eine Praxis, wenn die Installation abgeschlossen ist.

Üben (mit Dropbox)

Zunächst werde ich vorstellen, wie die Dropbox-API einfach verwendet werden kann. Informationen zum Registrieren als Dropbox-Entwickler und zum Erhalt eines Zugriffstokens finden Sie unter Registrierungsverfahren für Dropbox-API-App-Entwickler.

Im Folgenden können Sie Bilder mithilfe der Dropbox-API hochladen und freigegebene Links erstellen. Laden Sie die Bilder Ihres Lieblingskalenders aus dem Internet herunter und benennen Sie sie der Reihe nach in 1.jpg, 2.jpg, ... um.

import dropbox
import os

#1.Verwenden der Dropbox-API
DBX_ACCESS_TOKEN = ***********************
dbx = dropbox.Dropbox(DBX_ACCESS_TOKEN)

#2.Laden Sie Dateien in Dropbox hoch und erstellen Sie freigegebene Links
for month in range(1,13):
  local_path = '%s.jpg' %month
  dbx_path = "/" + local_path
 
  #2-1.Datei-Upload (Erläuterung 1)
  f = open(local_path, 'rb')
  dbx.files_upload(f.read(),dbx_path, mode=dropbox.files.WriteMode.overwrite)
  f.close()
  
  #2-2.Erstellen eines gemeinsamen Links (Erläuterung 2)
  setting = dropbox.sharing.SharedLinkSettings(requested_visibility=dropbox.sharing.RequestedVisibility.public)
  try:       
    link = dbx.sharing_create_shared_link_with_settings(path=dbx_path, settings=setting)
  except:
    print("Bereits geteilt.")
 else:
    url = link[0].url
    print(url)

Erklärung 1 Standardmäßig lautet der Modus von files_upload WriteMode.add. In diesem Fall wird eine Datei mit demselben Namen wie die hochzuladende Datei bereits unter dem Dateinamen (1) gespeichert. Erweiterung. Wenn Sie überschreiben möchten, stellen Sie den Modus auf Überschreiben ein.

Kommentar 2 In SharedLinkSettings gibt es drei Arten von Freigabemethoden: public, team_only und password (für den Zugriff ist ein Kennwort erforderlich). Darüber hinaus können Sie die Freigabefrist, das Kennwort usw. festlegen.

Wenn Sie mehr wissen möchten, [Dropbox für Python] Weitere Informationen finden Sie unter (https://dropbox-sdk-python.readthedocs.io/en/latest/index.html).

Einbindung in Linebot

Erstellen Sie mithilfe des im obigen Verfahren erstellten freigegebenen Links einen Linebot, der den freigegebenen Link als Antwort auf die Nachricht zurückgibt. Der größte Teil des folgenden Codes ist GitHub line-bot-sdk-python-Beispiele ) Ist das gleiche wie das beschriebene.

from flask import Flask, request, abort
import os
import dropbox
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

DBX_ACCESS_TOKEN = ***********************
dbx = dropbox.Dropbox(DBX_ACCESS_TOKEN)
#----------------------------Erklärung von hier 1
values = []
for month in range(1,13):
  local_path = '%s.jpg' %month
  dbx_path = "/" + local_path

  link = dbx.sharing_list_shared_links(path=dbx_path).links
  url = link[0].url
  url = url.replace('www.dropbox','dl.dropboxusercontent').replace('?dl=0','')
  values.append(url)

keys = [1,2,3,4,5,6,7,8,9,10,11,12]
pic_id = dict(zip(keys, values))
#----------------------------Erklärung bis hierher 1

#Umgebungsvariablen abrufen
YOUR_CHANNEL_ACCESS_TOKEN = ***********************
YOUR_CHANNEL_SECRET = ***********************

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

@app.route("/")
def hello_world():
    return "hello world!"

@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'

#----------------------------Erklärung 2 von hier
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    words = [12,11,10,9,8,7,6,5,4,3,2,1]
    text = event.message.text
    for word in words:
        msg = 'Kalender' + str(word)
        if msg in text:
            a = word - 1
            key = keys[a]
            line_bot_api.reply_message(
            event.reply_token,[
            TextSendMessage(text = key + 'Es ist ein Monatskalender!'),
            TextSendMessage(text = pic_id[key])
            ])
#----------------------------Erklärung bis hierher 2

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

Erklärung 1 Erstellen Sie ein Wörterbuch, das den Monat des Kalenders mit der URL verknüpft. shared_list_shared_links (path = dbx_path) .links gibt zusätzlich zu den Links im entsprechenden Pfad ein Array zurück, das Dateiinformationen enthält. (Der Link wird zuerst gespeichert.) url.replaced ändert www.dropbox im freigegebenen Link zu dl.dropboxusercontent und löscht? Dl = 0. Dies ist der Vorgang, der erforderlich ist, um den freigegebenen Link im Browser anzuzeigen.

Kommentar 2 Die if-Anweisung ist bedingt, damit Linebot einen Bildlink gemäß der Nachricht sendet. (Siehe das Bild oben auf der Homepage) Wenn Sie [1,2, ... 12] in der Reihenfolge ab Januar in Wörtern speichern, wird "Kalender 1" zuerst gelesen, wenn Sie die Nachricht "Kalender Dezember" senden. Der Januar-Kalender ist zurück von Linebot. Daher werden Wörter als [12,11, ... 1] gespeichert.

Wenn Sie mehr wissen möchten, [Dropbox für Python] (https://dropbox-sdk-python.readthedocs.io/en/latest/index.html),[line-bot-sdk-python] Weitere Informationen finden Sie unter (https://line-bot-sdk-python.readthedocs.io/en/stable/index.html).

Referenz

Linebot Ich habe LINE Bot mit Python gestartet [Bis Sie den LINE-Bot mit Flask implementieren und für Heroku bereitstellen] (https://qiita.com/suigin/items/0deb9451f45e351acf92)

Dropbox Registrierungsverfahren für Dropbox API-App-Entwickler [Verwenden Sie die Dropbox-API, um Dateien hochzuladen, freigegebene Links zu erstellen und freigegebene Links abzurufen.] (https://qiita.com/Fortinbras/items/f77984e5a7c2b3045473)

** Offizielles Dokument ** [Dropbox for Python] (https://dropbox-sdk-python.readthedocs.io/en/latest/index.html) [line-bot-sdk-python] (https://line-bot-sdk-python.readthedocs.io/en/stable/index.html)

Recommended Posts

Linebot-Erstellung und Dateifreigabe mit Python
LINE-Bot [0] in Python
Dateiverarbeitung in Python
Dateimanipulation mit Python
Manipulation des Datei- / Ordnerpfads in Python
Speichern Sie die Binärdatei in Python
Erstellen Sie eine Binärdatei in Python
Eine Datei erstellen
ORC, Parkettdateivorgänge in Python
GUI-Erstellung in Python mit tkinter 2
Exklusive Steuerung mit Sperrdatei in Python
GUI-Erstellung in Python mit tkinter Teil 1
Konvertieren Sie die psd-Datei in Python in png
Schreiben Sie die O_SYNC-Datei in C und Python
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Exklusiver Dateizugriff zwischen Prozessen in Python
[GPS] Erstellen Sie eine kml-Datei mit Python
[Python] Lesen Sie die angegebene Zeile in der Datei
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Skript-Python-Datei
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Python-Dateiverarbeitung
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken