Seite 1 von 1

Post request mit parameter scheitert

Verfasst: Sonntag 7. Mai 2017, 20:20
von sls
Hallo zusammen,

um mit einem Skript bestimmte Tätigkeiten zu automatisieren, möchte ich über die requests lib eine API von Sirportly ansprechen. Dabei werden zum einen Token zur Authentifizierung übertragen, zum anderen bestimmte Parameter, um zu übermitteln, welche Informationen man erhalten möchte.

Code: Alles auswählen

import requests
import json


url = "https://api.sirportly.com/api/v2/contacts/delete"
headers = {'X-Auth-Token': 'my_fancy_token',
           'X-Auth-Secret': 'my_fancy_secret'}

contact = {'id': '0815'}
req = requests.post(url, headers=headers, data=contact)

print(response.json())
Die Ausgabe sieht dann so aus:

Code: Alles auswählen

{'error': "Contact not found with reference,name,id exclusively matching ''"}
In der Doku steht zwar beschrieben, welche Parameter man dafür einsetzen muss, ich habe nur nicht begriffen, wie ich das jetzt in den request einpflege.

https://sirportly.com/docs/api-specific ... contacts-2

Könnt ihr mir einen Ratschlag geben?

Gruß,

sls

Re: Post request mit parameter scheitert

Verfasst: Sonntag 7. Mai 2017, 21:32
von Sirius3
@sls: von Pythonseite her scheinst Du ja alles richtig zu machen, es existiert nur kein Kontakt mit der Referenz, dem Namen oder der ID '0815'. Fang doch mal mit „Listing all contacts“ an, da kannst Du bei den Parametern weniger falsch, da keine gebraucht werden.

Re: Post request mit parameter scheitert

Verfasst: Sonntag 7. Mai 2017, 22:37
von sls
@Sirius4: vielen Dank für die Antwort. "Listing all contacts" funktioniert einwandfrei, da der Parameter "page" optional ist, lässt man diesen weg, nimmt er immer Page 1 und gibt somit alle Einträge der ersten Seite zurück.

Ich habe nun mal versucht, die Daten für eine bestimmte Seite zu erhalten:

Code: Alles auswählen

import requests
import json

url = "https://api.sirportly.com/api/v2/contacts/all"
headers = {'X-Auth-Token': 'blablubblabla',
           'X-Auth-Secret': 'blahablabla'}

page={"pagination": {"page": 5}}

response = requests.post(url, headers=headers, data=page)

print(response.json())
Er ignoriert meinen Übergabeparameter und geht vom Default-Wert aus. Kann das so mittels "data=page" hier überhaupt funktionieren?



Mfg,
sls

Re: Post request mit parameter scheitert

Verfasst: Montag 8. Mai 2017, 05:00
von Sirius3
@sls: die API erwartet ja auch nur page als Parameter:

Code: Alles auswählen

page = {"page": 5}
response = requests.post(url, headers=headers, data=page)

Re: Post request mit parameter scheitert

Verfasst: Montag 8. Mai 2017, 16:25
von sls
@Sirius3: verstehe, ja, das funktioniert einwandfrei. Vielen dank dafür schonmal!

Nun zum Anzeigen / Löschen bestimmter Kontakte. Beide können laut Doku wieder mit dem Ende /info oder /delete im URL angesprochen werden. Übergabeparameter "contact".

Code: Alles auswählen

import requests
import json

url = "https://api.sirportly.com/api/v2/info"
headers = {'X-Auth-Token': 'bla',
           'X-Auth-Secret': 'blub'}

contact = {'id': 0815}

response = requests.post(url, headers=headers, data=contact)

print(response.json())
Als Antwort kommt dann:

Code: Alles auswählen

{'error': 'ControllerOrActionMissing'}
Bzw. hat das response-Objekt den Rückgabecode 404. Ich habe es mit mehreren IDs probiert, aber leider tut sich nichts.

Mfg,

sls

Re: Post request mit parameter scheitert

Verfasst: Montag 8. Mai 2017, 16:56
von Sr4l
Du musst mal genauer lesen.

Du kannst deine Variabeln in Python nennen wie du möchtest, das sieht der Server nicht. Der Parameter heißt "contact - this is the name, ID or reference for a contact (required)"

ich schätze also mal: contact = {'id': 123} oder contact = {'id': 'My Name'}

Re: Post request mit parameter scheitert

Verfasst: Montag 8. Mai 2017, 18:30
von sls
@Sr4l: wie übergebe ich denn contact = {'id': 0815} der Post-methode so, dass es der Server als gültigen Parameter erkennt?

Code: Alles auswählen

{
  "id": 1,
  "reference": "ADAM",
  "name": "Adam Cooke",
  "abbreviated_name": "Adam C",
  "company": "aTech Media",
  "pin": "390976",
  "created_at": "2012-03-20T09:28:41Z",
  "discussion_count": 1,
  "contact_methods": [
    {
      "id": 1,
      "method_type": "email",
      "data": "adam@atechmedia.com",
      "default": true
      ...
    }
So ist der exemplarische Aufbau des Json-Strings, 'id':1 wäre also das was ich benötige. 'name' als Parameter fällt leider heraus, da es auch Kontakte mit None-Wert gibt.

Mfg,

sls

Re: Post request mit parameter scheitert

Verfasst: Montag 8. Mai 2017, 18:45
von Sr4l
ups ... sorry ich war nur mit halben Kopf dabei. Mein Text ist richtig, mein Code falsch.

Der Parameter ist "contact", nicht "id".

contact = {'contact': 123} oder contact = {'contact': 'My Name'}

Re: Post request mit parameter scheitert

Verfasst: Montag 8. Mai 2017, 19:00
von sls
Ich habe vergessen zu erwähnen, dass ich schon alle möglichen Varianten ausprobiert habe, unter anderem auch die von dir empfohlene: contacts = {'contact': 0815}. Auch habe ich es mit params=contact probiert, und was mir in meiner Ahnungslosigkeit und stack overflow Zeitverbrennung noch so in den Sinn kam. Übersehe ich etwas?

Muss der Parameter vielleicht doch noch etwas anders aussehen? :K

Re: Post request mit parameter scheitert

Verfasst: Dienstag 9. Mai 2017, 11:39
von Sr4l
Wenn das ganze mit dem Parameter "page" funktioniert sollte es keinen Grund geben warum bei "contact" nicht so funktioniert.

Versuch doch einfach mal alle möglichen API Aktionen und notiere dir welche funktionieren und welche nicht, dann wirst du sicherlich ein Muster erkennen.

Re: Post request mit parameter scheitert

Verfasst: Dienstag 9. Mai 2017, 16:38
von sls
Hi,

mittlerweile konnte ich den Fehler finden. Wie so oft, mal wieder ein dämlicher Fehler.

Aus welchem Grund auch immer habe ich im URL "https://api.sirportly.com/api/v2/contactsinfo" eine Angabe ausgelassen. Jetzt funktioniert es natürlich einwandfrei. Beim nächsten Mal werde ich den Code gründlicher prüfen.

Vielen Dank für eure Hilfe, hat mir super weitergeholfen!

Grüße,

sls