Registrieren Sie Ihr Lieblingsgeschäft / Ihre Lieblingseinrichtung mit Ihrem Lieblingsnamen und erstellen Sie einen Line-Bot, der Informationen zu diesem Geschäft / dieser Einrichtung erhalten kann.
app.py Von Line verteilter Beispielcode.
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
# line-Zugriff von der Entwicklerseite_Token und Kanal_Generieren Sie jedes Geheimnis und fügen Sie es hier in eine Variable ein
#Wenn Sie es nicht wissen, lesen Sie andere Artikel. Ich werde es hier weglassen, weil viele andere Leute es geschrieben haben.
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:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
#Die Veranstaltung enthält viele Benutzerinformationen.
@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()
Bereiten Sie die folgenden beiden im selben Ordner vor.
Stellen Sie sicher, dass Sie Gunicorn installieren. (Es scheint eine Bibliothek zu sein, die vom Heroku-Server benötigt wird.) Die Verwendung einer virtuellen Python-Umgebung namens venv macht es noch sauberer, aber ich habe es nicht getan, weil ich es nicht gut machen konnte, wie in Aktueller Artikel beschrieben.
argon2-cffi==20.1.0
asgiref==3.2.10
async-generator==1.10
attrs==20.2.0
backcall==0.2.0
bleach==3.1.5
certifi==2020.6.20
cffi==1.14.2
chardet==3.0.4
click==7.1.2
colorama==0.4.3
decorator==4.4.2
defusedxml==0.6.0
entrypoints==0.3
Flask==1.1.2
gunicorn==20.0.4
idna==2.10
itsdangerous==1.1.0
jedi==0.17.2
Jinja2==2.11.2
json5==0.9.5
jsonschema==3.2.0
line-bot-sdk==1.17.0
MarkupSafe==1.1.1
mistune==0.8.4
nbclient==0.5.0
nbconvert==6.0.2
nbformat==5.0.7
nest-asyncio==1.4.0
notebook==6.1.4
numpy==1.19.2
packaging==20.4
pandocfilters==1.4.2
parso==0.7.1
pickleshare==0.7.5
prometheus-client==0.8.0
prompt-toolkit==3.0.7
pycparser==2.20
Pygments==2.7.0
pyparsing==2.4.7
pyrsistent==0.17.3
python-dateutil==2.8.1
pytz==2020.1
pywinpty==0.5.7
pyzmq==19.0.2
requests==2.24.0
selenium==3.141.0
Send2Trash==1.5.0
six==1.15.0
sqlparse==0.3.1
terminado==0.8.3
testpath==0.4.4
tornado==6.0.4
urllib3==1.25.10
wcwidth==0.2.5
webencodings==0.5.1
Werkzeug==1.0.1
Procfile
web: gunicorn app:app --log-file -
Befolgen Sie die nachstehenden Schritte, um Heroku bereitzustellen!
heroku login
heroku git:clone -a [Mein App-Name]
cd [Mein App-Name]
* Wenn Sie im aktuellen Verzeichnis arbeiten, müssen Sie dies nicht tun
git add . #Ich füge eine Datei hinzu
git commit -am "make it better" #Ich aktualisiere die geänderte Datei
git push heroku master #Ich dränge
Lassen Sie uns vorerst eine Nachricht an line senden.
Lösungen: Nichts Bestimmtes. Schauen Sie sich einfach die Google Map Api-Dokumentation an.
Lösungen: Das war ziemlich nervig. Zuerst dachte ich, ich sollte versuchen, die Datenbank zu verwenden, aber diesmal hörte ich auf, weil die Lernkosten hoch zu sein schienen. Als nächstes habe ich versucht, das Wörterbuch in einer Pickle-Datei zu speichern, aber aus irgendeinem Grund hat es nicht funktioniert. Sind Binärdaten nutzlos? ?? Die Ursache ist nicht klar. Schließlich habe ich beschlossen, das Wörterbuch im JSON-Format zu speichern. Es hat funktioniert, aber jedes Mal, wenn ich eine Änderung vorgenommen habe, sind die Daten verschwunden. Ich dachte, ich würde eine JSON-Datei senden, wenn ich das Passwort online eingebe, aber diesmal hörte ich auf.
Lösungen Das war wieder ziemlich schwierig. Zusätzlich zum "Registrieren" und "Löschen" von Variablen habe ich vier Antworten gegeben: "Bestätigen" der von mir erstellten Variablen und "Bestätigen" der Informationen zu Geschäften und Einrichtungen. (Es erklärt die Lösung nicht, aber ich hoffe, Sie können die Python-Datei unten sehen.)
Ich beabsichtige, so viele Bibliotheken und Grammatiken wie möglich für mein Studium aufzunehmen.
app.py Hauptdatei.
import json
class create_reply_message(object):
user_id = None
user_dictionaries = None
the_user_dictionary = None
def __init__(self, user_id=None,*args, **kwargs):
super().__init__(*args, **kwargs)
self.user_id = user_id
#Wörterbuch vorbereiten
with open("users_info.json", 'r') as f:
self.user_dictionaries = json.load(f)
self.the_user_dictionary = self.user_dictionaries.setdefault(self.user_id, {})
def legister_fav_shop_institution(self, shop_institute_actual_name, shop_institute_variable):
user_dictionaries_copy = self.user_dictionaries.copy()
the_user_dictionary_copy = user_dictionaries_copy[self.user_id]
the_user_dictionary_copy[shop_institute_variable] = shop_institute_actual_name
with open("users_info.json", 'w') as f:
json.dump(user_dictionaries_copy, f)
return 'Abschluss der Registrierung!'
def confirm_what_legistered(self):
if self.the_user_dictionary == {}:
reply_msg = "Es sind noch keine Geschäfte / Einrichtungen registriert ..."
return reply_msg
else:
reply_msg = []
for dict_key in self.the_user_dictionary:
reply_msg.append(dict_key)
reply_msg.insert(0, f'Die registrierten Geschäfte und Einrichtungen sind unten{len(self.the_user_dictionary)}Einer! !!')
return "\Hmm ·".join(reply_msg)
def delete_fav_shop_institution(self, shop_institute_variable):
user_dictionaries_copy = self.user_dictionaries.copy()
the_user_dictionary_copy = user_dictionaries_copy[self.user_id]
del the_user_dictionary_copy[shop_institute_variable]
with open("users_info.json", 'w') as f:
json.dump(user_dictionaries_copy, f)
return shop_institute_variable + 'Ist gelöscht!'
google_maps_client.py Eine Klasse, die nur Informationen von Google Map Api erhält und diese in die Variable self.
import requests
from urllib.parse import urlencode, urlparse, parse_qsl
class locate_fav_shop_institution(object):
data_type="json"
location_query = None
api_key = None
def __init__(self, api_key=None, shop_institution_name=None,
*args, **kwargs):
super().__init__(*args, **kwargs)
if api_key == None:
raise Exception('API key is required')
self.api_key = api_key
self.location_query = shop_institution_name
if self.location_query != None:
self.place_id = self.extract_place_id()
if self.place_id == '':
raise Exception('Your fav shop/instition couldn\'t be located.')
self.fav_shop_institution_info = self.extract_details()
def extract_place_id(self):
base_endpoint_places = f"https://maps.googleapis.com/maps/api/place/findplacefromtext/{self.data_type}"
params = {
"key": self.api_key,
"input": self.location_query,
"inputtype": "textquery",
"fields": "place_id"
}
params_encoded = urlencode(params)
places_endpoint = f"{base_endpoint_places}?{params_encoded}"
r = requests.get(places_endpoint)
if r.status_code not in range(200, 299):
return ""
return r.json()['candidates'][0]['place_id']
def extract_details(self):
detail_base_endpoint = f"https://maps.googleapis.com/maps/api/place/details/{self.data_type}"
detail_params = {
"place_id": f"{self.place_id}",
"fields": "business_status,opening_hours,formatted_phone_number,website",
"language": "ja",
"key": self.api_key
}
detail_params_encoded = urlencode(detail_params)
detail_url = f"{detail_base_endpoint}?{detail_params_encoded}"
r = requests.get(detail_url)
return r.json()['result']
how_to_reply.py Eine Klasse, mit der Sie auf Nachrichten antworten können, die von der anderen Partei empfangen wurden.
import json
class create_reply_message(object):
user_id = None
user_dictionaries = None
the_user_dictionary = None
def __init__(self, user_id=None,*args, **kwargs):
super().__init__(*args, **kwargs)
self.user_id = user_id
#Wörterbuch vorbereiten
with open("users_info.json", 'r') as f:
self.user_dictionaries = json.load(f)
self.the_user_dictionary = self.user_dictionaries.setdefault(self.user_id, {})
def legister_fav_shop_institution(self, shop_institute_actual_name, shop_institute_variable):
user_dictionaries_copy = self.user_dictionaries.copy()
the_user_dictionary_copy = user_dictionaries_copy[self.user_id]
the_user_dictionary_copy[shop_institute_variable] = shop_institute_actual_name
with open("users_info.json", 'w') as f:
json.dump(user_dictionaries_copy, f)
return 'Abschluss der Registrierung!'
def confirm_what_legistered(self):
if self.the_user_dictionary == {}:
reply_msg = "Es sind noch keine Geschäfte / Einrichtungen registriert ..."
return reply_msg
else:
reply_msg = []
for dict_key in self.the_user_dictionary:
reply_msg.append(dict_key)
reply_msg.insert(0, f'Die registrierten Geschäfte und Einrichtungen sind unten{len(self.the_user_dictionary)}Einer! !!')
return "\Hmm ·".join(reply_msg)
def delete_fav_shop_institution(self, shop_institute_variable):
user_dictionaries_copy = self.user_dictionaries.copy()
the_user_dictionary_copy = user_dictionaries_copy[self.user_id]
del the_user_dictionary_copy[shop_institute_variable]
with open("users_info.json", 'w') as f:
json.dump(user_dictionaries_copy, f)
return shop_institute_variable + 'Ist gelöscht!'
personal_informations.py Da es persönliche Informationen enthält, werden diese nicht veröffentlicht. Ich habe dem unzähligen Substantiv namens information s hinzugefügt.
confirm.txt Text für die Vorlage, die gesendet werden soll, wenn die Informationen des Geschäfts / der Einrichtung abgerufen werden.
$Ich habe den Namen gesehen!
$businessStatus
Der Zeitplan für diese Woche ist ↓↓
$openingHours
Wenn etwas passiert, kontaktieren Sie die unten stehende Telefonnummer!
$phoneNumber
Die Homepage ist übrigens ↓↓
$website
explanation.txt Text für die Vorlage zur Beschreibung des Bots.
$Vielen Dank für die Kontaktaufnahme Name!
$Wenn Sie wissen möchten, welche Geschäfte / Einrichtungen dieser Name bisher registriert hat
"Bestätigung"Bitte sende!
(Beispiel: Bestätigung)
$Wenn Sie die Informationen von Geschäften und Einrichtungen überprüfen möchten, die dieser Name bisher registriert hat
"Bestätigung[Registrierter Name]"Bitte sende!
(Beispiel: Bestätigungsbibliothek)
Wenn Sie neue Geschäfts- / Einrichtungsinformationen registrieren möchten
"Anmeldung[Offizieller Name des Geschäfts / der Einrichtung] [Registrierter Name]"bitte sende!
(Beispiel: Registrierung: Bibliothek am Tokyo Institute of Technology)
Im Gegenteil, wenn Sie die Informationen des Shops / der Einrichtung löschen möchten
"Löschen[Registrierter Name]"bitte sende!
(Beispiel: Gelöschte Bibliothek)
Freut mich, dich kennenzulernen! !!
user_info.json Eine JSON-Datei, in der Benutzerinformationen gespeichert werden. Die Pickle-Datei hat nicht funktioniert, also habe ich mich für json entschieden. Ich wollte wenn möglich die Datenbank benutzen.
{user_id: {"\u81ea\u8ee2\u8eca\u5c4b": "\u30b5\u30a4\u30af\u30eb\u30d9\u30fc\u30b9\u3042\u3055\u3072\u4e09\u9df9\u4e95\u53e3\u5e97", "\u3061\u305a\u3051": "\u6771\u4eac\u5de5\u696d\u5927\u5b66\u4ed8\u5c5e\u56f3\u66f8\u9928"}}
Es wird überhaupt nicht erklärt, aber ich habe es so abgeschlossen. Ich bin ein Anfänger, obwohl es Python ist, ist der Code ziemlich schwer zu lesen, aber wenn Sie interessiert sind, lesen Sie ihn bitte.
Senden Sie eine entsprechende Nachricht und geben Sie eine Line-Bot-Beschreibung zurück.
Sie können die Namen überprüfen, die Sie bisher registriert haben!
Sie können Ihre Lieblingsgeschäfte und -einrichtungen neu registrieren. Stellen Sie sicher, dass der Abstand zwischen ihnen in voller Breite ist!
Sie können die bisher registrierten Geschäfte / Einrichtungen löschen.
Sie können Geschäftszeiten, Telefonnummern und Webseiten überprüfen, um festzustellen, ob das Geschäft geöffnet ist.
Die Liste der schlechten Dinge hat kein Ende, aber die Herstellung macht wirklich Spaß! Da mein Hauptfach Maschinenbau ist, habe ich nicht viele Möglichkeiten, Programmierung zu schreiben, und ich habe möglicherweise keine Zeit, andere Dinge zu studieren, weil ich mit Laborunterricht ziemlich beschäftigt sein werde, aber ich kann mir Ideen einfallen lassen und Dinge machen. In dieser Hinsicht ist es dasselbe, und ich bin sicher, dass es von Vorteil sein wird. Und vor allem macht es Spaß, deshalb möchte ich weiter programmieren.
Es ist ein Line-Bot von ↓. Es wurde von einem Anfänger gemacht und es gibt viele Fehler (ich kenne einige, aber ich habe es nicht behoben, lol) Ich habe es sehr schwer gemacht! Ich wäre Ihnen dankbar, wenn Sie Freunde hinzufügen könnten.
Recommended Posts