Frage

Ich versuche, mithilfe der Requests-Bibliothek eine Variable in eine POST-Anfrage einzufügen.Hier ist mein Code:

import requests

message = "if i can\'t let it go out of my mind"

split_message = message.split()

initial_request = requests.get('http://ws.spotify.com/search/1/track?q='.join(split_message[:3]))
print initial_request.content

Das Ergebnis, das ich erhalte, ist folgendes (was ein Fehler ist, da es den URI durcheinander bringt):

No connection adapters were found for 'ifhttp://ws.spotify.com/search/1/track?q=ihttp://ws.spotify.com/search/1/track?q=can't'

Ich möchte, dass der Anforderungs-URI so aussieht:

"http://ws.spotify.com/search/1/track?q=if i can\'t"

Was fehlt mir hier?Gibt es eine bessere Möglichkeit, eine Variable an den Anforderungs-URI zu übergeben?Ich habe versucht, ein Wörterbuch als Nutzlast zu verwenden, kann aber keine Variable in ein Wörterbuch einfügen.

War es hilfreich?

Lösung

String.join ist sehr kontraintuitiv, die Zeichenfolge ist etwas, was Sie tun trete mit .. Ein nicht beitreten zu.

Untersuchen Sie den folgenden Code:

>>> x = range(5)
>>> x
[0, 1, 2, 3, 4]
>>> x = [str(c) for c in x]
>>> x
['0', '1', '2', '3', '4']
>>> "-".join(x)
'0-1-2-3-4'

Hier der „Tischler“ (-) wird zwischen jedem Element in unserem Array eingefügt, das wir mithilfe des Listenverständnisses in Zeichenfolgen konvertiert haben.

Hier ist Ihr Code:

'http://ws.spotify.com/search/1/track?q='.join(split_message[:3])

Ihre Verbindungszeichenfolge lautet 'http://ws.spotify.com/search/1/track?q=' und so wird dies zwischen jedem Element im Array eingefügt split_message[:3].

Schauen wir uns also an, was los ist:

>>> message = "if i can\'t let it go out of my mind"
>>> split_message = message.split()
>>> split_message
['if', 'i', "can't", 'let', 'it', 'go', 'out', 'of', 'my', 'mind']
>>> split_message[:3]
['if', 'i', "can't"]

Hier ist das Array 3 Elemente lang, was erklärt, warum die Ausgabezeichenfolge wie folgt lautet:

 ifhttp://ws.spotify.com/search/1/track?q=ihttp://ws.spotify.com/search/1/track?q=can't

Aber einige Zeilenumbrüche hinzufügen:

 if
   http://ws.spotify.com/search/1/track?q=
 i
   http://ws.spotify.com/search/1/track?q=
 can't'

Beachten Sie, dass die Verbindungszeichenfolge zweimal eingefügt wird, was erklärt, warum es auf den ersten Blick so aussieht, als würde der URI durcheinander gebracht.

Was Sie stattdessen wollen, ist:

request = 'http://ws.spotify.com/search/1/track?q='+"%20".join(split_message[:3])

Beachten Sie, dass wir oben join verwenden %20:etwa so: "%20".join(split_message[:3]) und fügen Sie dies als Anforderungspräfix hinzu.Daraus ergibt sich die folgende URL mit korrekt codierten Leerzeichen:

"http://ws.spotify.com/search/1/track?q=if%20i%20can't"

Andere Tipps

initial_request = requests.get('http://ws.spotify.com/search/1/track?q=' +
                               ' '.join(split_message[:3]))

s.join(seq) klebt die Elemente zusammen seq mit der Schnur s stecken zwischen ihnen fest.Zum Beispiel, 'a'.join('bcd') == 'bacad'.Beachten Sie, dass Ihre gewünschte Zeichenfolge wahrscheinlich nicht das ist, was Sie eigentlich senden sollten.sollten Sie wahrscheinlich verwenden + statt Leerzeichen.Das Anforderungsmodul kann die URL-Parameterkodierung für Sie übernehmen:

params = {'q': ' '.join(split_message[:3])}
initial_request = requests.get('http://ws.spotify.com/search/1/track',
                               params=params)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top