2013-06-28 4 views
1

Je tirais de 3 requêtes distinctes contre une API RESTful (J'utilise python/urllib2/pandas géants) chaque requête contenant l'une des variantes de chaîne suivantes:Passer une chaîne contenant unicode à une API RESTful

(1) 'Caveolin-1 suppresses Human Immunodeficiency Virus-1 replication by inhibiting acetylation of NF-\xce\xbaB' 

(2) 'Caveolin-1 suppresses Human Immunodeficiency virus-1 replication by inhibiting acetylation of NF-κB' 

(3) 'Caveolin-1 suppresses Human Immunodeficiency virus-1 replication by inhibiting acetylation of NF 

les résultats sont les suivants:

(1) ne marche pas retourné aucun résultat (lorsque vous avez terminé programmation de python)

(2) Travaux et renvoie le résultat attendu - l'enregistrement correspondant (requête tiré manuellement à l'aide d'un plug-in Chrome pour faire API RESTful appelle et coller juste le str ING est dans la partie appropriée de l'appel API)

(3) fonctionne comme (2)

Depuis que je suis la source de données et je suis en train de faire (1) programmation de python par chaîne lecture d'un dataframe, y a-t-il un moyen de faire quelque chose (je ne sais pas quoi) avec les caractères unicode dans mes données sources (je suppose que c'est ce que '\ xbaB' etc.) pour les rendre passable à l'API? '\ xce \ xbaB' semble être l'encodage de 'κB' basé sur ce qui précède.

Ou c'est ceci quelque chose que je vais devoir regarder la documentation d'API pour (qui pour ce peu n'existe pas je ne pense pas ...).

Si c'est difficile/c'est plus facile - quel est le meilleur moyen de se débarrasser de tout caractère unicode de la chaîne avant de passer la requête (c'est-à-dire de repli sur (3))?

Merci d'avance!

REF: de python Je suis exécutant la commande suivante à venir avec l'API

api_call = 'http://some_api/index:ABCDE?query=title(' + str(title_string) + ')' 
headers = {'APIKey': API_key, 'accept':'text/xml, application/atom+xml'} 
request = urllib2.Request(api_call, headers = headers,) 
response = urllib2.urlopen(request,'' , 30) 

return response.read() 

Répondre

2

\ XCF et \ Xba sont des caractères avec les valeurs hexagonales respectivement ce et ba. Sans en savoir plus sur la façon dont vous parlez à l'API ou ce qu'il attend, je pense que vous pourriez faire quelque chose comme ça pour faire la chaîne passable:

>>> urllib.quote('an Immunodeficiency Virus-1 replication by inhibiting acetylation of NF-\xce\xbaB') 
'an%20Immunodeficiency%20Virus-1%20replication%20by%20inhibiting%20acetylation%20of%20NF-%CE%BAB' 

EDIT:

Normalement en python c'est ainsi J'ajouter des paramètres à l'URL:

params = {'query' : 'title(' + title_string + ')'} 
api_call = 'http://some_api/index:ABCDE?' + urllib.urlencode(params) 

Je pencherais vers qu'au lieu de ma suggestion urllib.quote plus tôt (que je pense serait applicable si title_string faisait partie du chemin), mais je ne suis pas Assurez-vous que c'est suffisant avec les valeurs hexadécimales dans title_string. Je pense que cela dépendra de la façon dont il est géré du côté serveur.

+0

opiethehokie Merci d'avoir pensé à ce sujet - plus d'information vient d'ajouter à ma q pour répondre certains des points que vous avez soulevés. – user7289

0

Essayez de convertir « \ » pour être « \\ » depuis \ « x » signifie un code de caractère hexadécimal presigned au nombre hexadécimal

Questions connexes