Por que é solicitações é a adição de uma parte de uma lista para consulta repetida URIs?

StackOverflow https://stackoverflow.com//questions/21011262

Pergunta

Eu estou tentando colocar uma variável em uma solicitação POST usando os Pedidos de biblioteca.Aqui é o meu código:

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

O resultado, eu estou ficando é este (que é um erro, como é bagunçar a URI):

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

Eu gostaria que o URI de solicitação para olhar como este:

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

O que estou ausente aqui?Existe uma maneira melhor para passar uma variável para o URI de solicitação?Eu tentei usar um dicionário como carga, mas eu não posso colocar uma variável em um dicionário.

Foi útil?

Solução

String.join é muito contra-intuitivo, a seqüência de caracteres é algo que você junte-se com não junte-se a.

Examine o seguinte código:

>>> 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'

Aqui, o "carpinteiro" (-) é inserida entre cada elemento na matriz, o que temos convertidos para cadeias de caracteres usando a lista de compreensão.

Aqui está o código:

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

Sua adesão a seqüência de caracteres é 'http://ws.spotify.com/search/1/track?q=' e assim, esta é inserida entre cada elemento na matriz split_message[:3].

Então vamos examinar o que está acontecendo:

>>> 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"]

Aqui a matriz é de 3 itens longo, o que explica por que a seqüência de saída é:

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

Mas a adição de algumas quebras de linha:

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

Observe o ingresso de seqüência de caracteres é inserido duas vezes, o que explica por que à primeira vista parece apenas o seu esterco, até o URI.

O que você quer, em vez disso:

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

Repare, no exemplo acima nós join usando %20:assim: "%20".join(split_message[:3]) e adicionar esta a solicitação de prefixo.O que dá a URL abaixo, com os espaços codificados corretamente:

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

Outras dicas

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

s.join(seq) paus juntos os elementos de seq com a seqüência de caracteres s preso entre eles.Por exemplo, 'a'.join('bcd') == 'bacad'.Note que sua seqüência desejada, provavelmente, não é o que você realmente deve ser o envio;você provavelmente deve usar + em vez de espaços.Os pedidos módulo pode manipular o parâmetro de url de codificação para você:

params = {'q': ' '.join(split_message[:3])}
initial_request = requests.get('http://ws.spotify.com/search/1/track',
                               params=params)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top