2016-04-27 7 views
0

Ich habe einen Code, der Benutzernamen aus einem Excel-Blatt als eine Eingabe, die in einer Variablen xy zu einer Instagram-API gespeichert ist, die im Gegenzug gibt die Ergebnisse. Ich lade die URL zu einem JSON, um es in einem JSON-Schema zu erhalten.Suche nach der genauen Übereinstimmung vieler Benutzernamen in einer Variablen während der Schleife

Zum Beispiel, wenn mein Variable xy "shawn_123" das Ergebnis von der API enthält, ist:

{ 
"meta": { 
"code": 200 
}, 
"data": [ 
{ 
    "username": "shawn_123", 
    "profile_picture": "https://scontent.cdninstagram.com/t51.2885- 19/s150x150/11417456_1610194859266611_592197892_a.jpg", 
    "id": "641567093", 
    "full_name": "shawn ritz" 
}, 
{ 
    "username": "shawn_12345", 
    "profile_picture": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/11324946_808347519273018_2073555780_a.jpg", 
    "id": "2074312361", 
    "full_name": "shawney" 
} 
] 
} 

Und mein Code

for r in range(1,10): 
var=r,sheet.cell(row=r,column=1).value 
xy=var[1] 
myopener=Myopener() 
url=myopener.open('https://api.instagram.com/v1/users/search?q='+xy+'&count=1&access_token=641567093.1fb234f.a0ffbe574e844e1c818145097050cf33') 
beta=json.load(url) 
for item in beta['data']: 
    print(item['id']) 

Da es zwei Ausgänge von einem gleichen Benutzername abruft.

Hinweis: Ich möchte einen regulären Ausdruck, der den genauen Benutzernamen aus dem JSON sucht und die user_id nur dieses Datensatzes speichert.

Antwort

1

Sie überprüfen können, ob die username Matches bevor die ID Druck:

for item in beta['data']: 
    if item['username'] == xy: # here check the username from your input 
     print(item['id']) 

Oder mit next Betreiber:

user_id = next((item['id'] for item in beta['data'] if item['username'] == xy), None) 
+0

Also, Sie sagen, ich hier jeden regulären Ausdruck nicht brauchen? –

+0

Sie müssen nicht! – AKS

+0

Wenn es Ihnen nichts ausmacht, können Sie eine kurze Erklärung über die zweite Option mit dem nächsten Operator geben, den Sie angegeben haben. Es wäre wirklich hilfreich. Ich meinte, wie würde es in meiner Schleife funktionieren? Anstatt die user_id zu drucken, hänge ich sie jetzt an eine Liste an. >> if (conditions is true) dann list.append (item ['id']) –

0
d = {"data": [ { "username": "shawn_123", "profile_picture": "https://scontent.cdninstagram.com/t51.2885- 19/s150x150/11417456_1610194859266611_592197892_a.jpg", "id": "641567093", "full_name": "shawn ritz"}, { "username": "shawn_12345", "profile_picture": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/11324946_808347519273018_2073555780_a.jpg", "id": "2074312361", "full_name": "shawney" }]} 

#### To get list 
user_name = 'something' 
print [i['username'] for i in d['data'] if i['username'] == user_name] 

#### To get the username 

print [i['username'] for i in d['data'] if i['username'] == user_name][0] 
+0

Danke!Ich versuche tatsächlich, die Variablen anstelle der Zeichenkette selbst zu verwenden, weil ich mehr als 1000 Benutzernamen habe, die ich durchlaufen werde. –

0

Versuchen Sie, diese

"shawn_123".*?"id":\s"(\d+)" 

Regex demo

Erläuterung:
.: Alle Zeichen außer Zeilenumbruch sample
*: Null oder mehrmals sample
?: Einmal oder keine sample
\s: "Leerzeichen": Leerzeichen, Tabulator, Newline , Wagenrücklauf, vertikale Registerkarte sample
(…): Erfassungsgruppe sample
\: Ein oder mehr sample

Python: sample
+ einen besonderen Charakter Escapes

import re 
p = re.compile(ur'"shawn_123".*?"id":\s"(\d+)"', re.DOTALL) 
test_str = u"{\n\"meta\": {\n\"code\": 200\n},\n\"data\": [\n {\n \"username\": \"shawn_123\",\n \"profile_picture\": \"https://scontent.cdninstagram.com/t51.2885- 19/s150x150/11417456_1610194859266611_592197892_a.jpg\",\n \"id\": \"641567093\",\n \"full_name\": \"shawn ritz\"\n},\n {\n \"username\": \"shawn_12345\",\n \"profile_picture\": \"https://scontent.cdninstagram.com/t51.2885-19/s150x150/11324946_808347519273018_2073555780_a.jpg\",\n \"id\": \"2074312361\",\n \"full_name\": \"shawney\"\n}" 
m = re.findall(p, test_str) 
print m 
#[u'641567093'] 
+0

Vielen Dank für die Regex-Demo! Ich bin neu dazu und brauchte genau das, um über reguläre Ausdrücke Bescheid zu wissen. –

Verwandte Themen