Sitat av
vidarlo
https://freak.no/forum/showpost.php?...75&postcount=2
Set breakpoint på linje 41, fyr opp debugger, og sjekk korleis objektet ditt *faktisk* ser ut. Det er nettopp slikt som det her du bruker en debugger til. Det er ikkje spesielt vanskelig, og gjer det mogeleg å sjå korleis datastrukturer e.l. faktisk ser ut i minnet.
Hei!
"Sett breakpoint på linje 41", det vil si legge inn teksten "breakpoint()" der?
"Fyr opp debugger", kjøre et annet program som er ment til sånt altså? Forslag til hvilket?
Sitat av
Realist1
JSON blir parset som nøstede lister og dictionaries. Listeeelementene finner du med index (heltall), mens dictionary-verdien finner du med navn på keyen (som regel en string her, ser det ut til).
Jeg synes ikke den pretty-printen din var så veldig pretty, men hvis du f.eks. skal ha tak i payloaden, så kan du f.eks. prøve med
Kode
["entry"][0]["messaging"][0]["attachments"][0]["payload"]
Ellers, så kan du alltids manøvrere deg gjennom JSON-en ved å printe ut de forskjellige nivåene, ev. med type() for å dobbeltsjekke hva slags type det er.
F.eks.:
Kode
>>> print(output["entry"])
...blabla
>>> type(output["entry"])
...blabla
>>> print(output["entry"][0])
...blabla
Ofte er det lister inni der med bare ett element, noe som også er hvorfor jeg prøver med [0] innimellom. Men ved å gå gjennom JSON-en steg for steg på denne måten, så finner du fort ut hvordan du skal manøvrere deg til det punktet du er interessert i.
PS: Jupyter Notebook er perfekt til denne typen eksperimentering.
Smart! Jeg orket ikke å gjøre så mye ut av dette, men fant til slutt ut at dette fungerer:
Kode
import random
from flask import Flask, request
from pymessenger.bot import Bot
app = Flask(__name__)
FB_API_URL = 'https://graph.facebook.com/v7.0/me/messages'
ACCESS_TOKEN = '420420'
VERIFY_TOKEN = '420420'
bot = Bot(ACCESS_TOKEN)
#We will receive messages that Facebook sends our bot at this endpoint
@app.route("/messenger", methods=['GET', 'POST'])
def receive_message():
print("Kommando starter...")
if request.method == 'GET':
print("Request er GET")
token_sent = request.args.get("hub.verify_token")
return verify_fb_token(token_sent)
print("Token er kanskje OK")
else:
print("Request er ikke GET")
if request.method == 'POST':
print("Request er POST")
output = request.get_json()
print(output)
if output["object"] == "page":
for entry in output["entry"]:
for messaging_event in entry["messaging"]:
#print(output["entry"])
type(output["entry"])
#We got message
if messaging_event.get("message"):
##What is sender id, and which page recieve?
sender_id = messaging_event["sender"]["id"]
page_id = messaging_event["recipient"]["id"]
##If message is text, put it in message_text
if messaging_event['message'].get('text'):
message_text = messaging_event["message"]["text"]
print('Found text: ' + message_text + ', OK?')
##If message is attachment
if messaging_event['message'].get('attachments'):
print("It is attachment")
attachment_type = messaging_event["message"]["attachments"][0]["type"]
//Her
##If attachment type is image
if attachment_type == "image":
print("It is image")
#attachment_url = attachment_event["url"]
attachment_link = messaging_event["message"]["attachments"][0]["payload"]["url"]
print(attachment_link)
else:
print("Found unsupported attachment type")
//Stopp
else:
print("Found unsupported message type")
return("ok", 200)
def verify_fb_token(token_sent):
if token_sent == VERIFY_TOKEN:
return request.args.get("hub.challenge")
print("hub.challenge")
return 'Invalid verification token'
if __name__ == "__main__":
app.run(debug=True)
Sist endret av Stingray; 12. august 2020 kl. 22:29.