Hallo zusammen,
ich versuche jetzt seit mehreren Tagen Zugriff über ein Pythonskript mit Verwendung der "requests" bibliothek Informationen an den Synology Chat Kanal zu senden. Ich verwende hierbei Python3.6
Hilfreich hierzu war vorallem folgendes Tutorial: https://kb.synology.com/de-de/DSM/t...ash_commands_in_Chat_Integration#x_anchor_id8
Bisheriger Erfolg ist, dass ich Texte versenden kann. Ebenso Bilder welche im Internet liegen über den parameter file_url.
Nun möchte ich aber gerne eine Datei/Bild welches auf meinem RaspberryPi lokal liegt an den Chat senden.
Laut Requests-Hilfe gibt es folgende Möglichkeit:
https://stackabuse.com/how-to-upload-files-with-pythons-requests-library/
import requests
test_file = open("my_file.txt", "rb")
test_url = "http://httpbin.org/post"
test_response = requests.post(test_url, files = {"form_field_name": test_file})
Damit habe ich allerdings das Problem, dass ich nicht mehr konform zum Synology-Chat HTTP bin. Da die Bilddatei ja als Files eingehängt wird:
{
"args": {},
"data": "",
"files": {
"form_field_name": "This is my file\nI like my file\n"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "189",
"Content-Type": "multipart/form-data; boundary=53bb41eb09d784cedc62d521121269f8",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.25.0",
"X-Amzn-Trace-Id": "Root=1-5fc3c190-5dea2c7633a02bcf5e654c2b"
},
"json": null,
"origin": "102.5.105.200",
"url": "http://httpbin.org/post"
}
Laut Synology Tutorial und erfolgreichen Text und Internetbild Tests wird die Information ja allerdings über den key "payload" versendet:
payload={"text": "a fun image", "file_url": "http://imgur.com/xxxxx"}
Siehe wireshark mitschnitt:
payload=%7B%22text%22%3A%22Beispieltext%22%2C+%22file_url%22%3A%22https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FMond%23%2Fmedia%2FDatei%3AFull_Moon_Luc_Viatour.jpg%22%7D
Ich habe jetzt folgendes versucht:
SynoChatURL = 'http://IPvonNAS:5000/webapi/entry.cgi'
headers = {'content-type': 'application/x-www-form-urlencoded'}
api = 'SYNO.Chat.External'
method = 'incoming'
version = '2'
token = '"XXX"'
text = '"Beispieltext"'
fileLocation = "/home/sendTest.txt"
fileToSend = open(fileLocation,'rb')
parameter = (
('api', api),
('method', method),
('version', version),
('token', token),
)
############################Hier versuche ich mir den payload selbst zusammenzubauen#########################
data = {
'payload': '{"text":'+str(text)+', "file_url":"'+str(fileToSend)+ '"}'
}
###################################################################################################
#send information
response = requests.post(SynoChatURL, params=parameter, data=data, verify=False, headers=headers)
#close file
fileToSend.close()
Allerdings erhalte ich immer ein error:
{"error":{"code":407,"errors":"payload: invalid url"},"success":false}
Wenn ich mir den payload einmal debugge steht folgendes drin:
{'payload': '{"text":"Beispieltext", "file_url":"<_io.BufferedReader name=\'/home/sendTest.txt\'>"}'}
Kann mir hier jemand weiterhelfen?
Ist es überhaupt möglich lokale Dateien/Bilder an den Chat zu senden?
VG,
Forest
ich versuche jetzt seit mehreren Tagen Zugriff über ein Pythonskript mit Verwendung der "requests" bibliothek Informationen an den Synology Chat Kanal zu senden. Ich verwende hierbei Python3.6
Hilfreich hierzu war vorallem folgendes Tutorial: https://kb.synology.com/de-de/DSM/t...ash_commands_in_Chat_Integration#x_anchor_id8
Bisheriger Erfolg ist, dass ich Texte versenden kann. Ebenso Bilder welche im Internet liegen über den parameter file_url.
Nun möchte ich aber gerne eine Datei/Bild welches auf meinem RaspberryPi lokal liegt an den Chat senden.
Laut Requests-Hilfe gibt es folgende Möglichkeit:
https://stackabuse.com/how-to-upload-files-with-pythons-requests-library/
import requests
test_file = open("my_file.txt", "rb")
test_url = "http://httpbin.org/post"
test_response = requests.post(test_url, files = {"form_field_name": test_file})
Damit habe ich allerdings das Problem, dass ich nicht mehr konform zum Synology-Chat HTTP bin. Da die Bilddatei ja als Files eingehängt wird:
{
"args": {},
"data": "",
"files": {
"form_field_name": "This is my file\nI like my file\n"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "189",
"Content-Type": "multipart/form-data; boundary=53bb41eb09d784cedc62d521121269f8",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.25.0",
"X-Amzn-Trace-Id": "Root=1-5fc3c190-5dea2c7633a02bcf5e654c2b"
},
"json": null,
"origin": "102.5.105.200",
"url": "http://httpbin.org/post"
}
Laut Synology Tutorial und erfolgreichen Text und Internetbild Tests wird die Information ja allerdings über den key "payload" versendet:
payload={"text": "a fun image", "file_url": "http://imgur.com/xxxxx"}
Siehe wireshark mitschnitt:
payload=%7B%22text%22%3A%22Beispieltext%22%2C+%22file_url%22%3A%22https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FMond%23%2Fmedia%2FDatei%3AFull_Moon_Luc_Viatour.jpg%22%7D
Ich habe jetzt folgendes versucht:
SynoChatURL = 'http://IPvonNAS:5000/webapi/entry.cgi'
headers = {'content-type': 'application/x-www-form-urlencoded'}
api = 'SYNO.Chat.External'
method = 'incoming'
version = '2'
token = '"XXX"'
text = '"Beispieltext"'
fileLocation = "/home/sendTest.txt"
fileToSend = open(fileLocation,'rb')
parameter = (
('api', api),
('method', method),
('version', version),
('token', token),
)
############################Hier versuche ich mir den payload selbst zusammenzubauen#########################
data = {
'payload': '{"text":'+str(text)+', "file_url":"'+str(fileToSend)+ '"}'
}
###################################################################################################
#send information
response = requests.post(SynoChatURL, params=parameter, data=data, verify=False, headers=headers)
#close file
fileToSend.close()
Allerdings erhalte ich immer ein error:
{"error":{"code":407,"errors":"payload: invalid url"},"success":false}
Wenn ich mir den payload einmal debugge steht folgendes drin:
{'payload': '{"text":"Beispieltext", "file_url":"<_io.BufferedReader name=\'/home/sendTest.txt\'>"}'}
Kann mir hier jemand weiterhelfen?
Ist es überhaupt möglich lokale Dateien/Bilder an den Chat zu senden?
VG,
Forest