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.
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)
Sprache: Python 3.7.4 Bibliothek (Linebot): Flask 1.1.1, line-bot-sdk 1.16.0, Bibliothek (Dropbox): Dropbox 9.5.0
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.
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).
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).
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