2016-08-25 3 views
1

Hier ist mein Code:Schreiben Suchergebnisse nur von den letzten Zeile in csv

import urllib 
import json 
import csv 

apiKey = "MY_KEY" # Google API credentials 

##perform a text search based on input, place results in text-search-results.json 
print "Starting" 
myfile = open("results.csv","wb") 
headers = [] 
headers.append(['Search','Name','Address','Phone','Website','Type','Google ID','Rating','Permanently Closed']) 
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 
wr.writerows(headers) 
with open('input_file.csv', 'rb') as csvfile: 
    filereader = csv.reader(csvfile, delimiter=',', quotechar='|') 
for row in filereader: 
    search = ', '.join(row) 
    search.replace(' ', '+') 
    url1 = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=%s&key=%s" % (search,apiKey) 
    urllib.urlretrieve(url1,"text-search-results.json") 

    print "SEARCH", search 
    print "Google Place URL", url1 

    ## load text-search-results.json and get the list of place IDs 
    textSearchResults = json.load(open("text-search-results.json")) 
    listOfPlaceIds = [] 
    for item in textSearchResults["results"]: 
     listOfPlaceIds.append(str(item["place_id"])) 

    ## open a nested list for the results 
     output = [] 

     ## iterate through and download a JSON for each place ID 
     for ids in listOfPlaceIds: 
      url = "https://maps.googleapis.com/maps/api/place/details/json?placeid=%s&key=%s" % (ids,apiKey) 
      fn = ids + "-details.json" 
      urllib.urlretrieve(url,fn) 

      data = json.load(open(fn)) 
      lineToAppend = [] 
      lineToAppend.append(search) 

      try: 
       lineToAppend.append(str(data["result"]["name"])) 
      except KeyError: 
       lineToAppend.append('') 
      try: 
       lineToAppend.append(str(data["result"]["formatted_address"])) 
      except KeyError: 
       lineToAppend.append('') 
      try: 
       lineToAppend.append(str(data["result"]["formatted_phone_number"])) 
      except KeyError: 
       lineToAppend.append('') 
      try: 
       lineToAppend.append(str(data["result"]["website"])) 
      except KeyError: 
       lineToAppend.append('') 
      try: 
       lineToAppend.append(str(data["result"]["types"])) 
      except KeyError: 
       lineToAppend.append('') 
      try: 
       lineToAppend.append(str(data["result"]["place_id"])) 
      except KeyError: 
       lineToAppend.append('') 
      try: 
       lineToAppend.append(str(data["result"]["rating"])) 
      except KeyError: 
       lineToAppend.append('') 
      try: 
       lineToAppend.append(str(data["result"]["permanently_closed"])) 
      except KeyError: 
       lineToAppend.append('') 

     output.append(lineToAppend) 
     wr.writerows(output) 
myfile.close() 

Was dies tut ist die Suchbegriffe aus einer Spalte in der input_file nehmen und dass die Suche über die Google Places API ausgeführt wird. Wenn ich jedoch mehrere Suchbegriffe habe, werden nur die letzten Suchergebnisse in der Datei results.csv zurückgegeben. Ich bin nicht ganz sicher, warum das passiert, da es alle Suchbegriffe liest und sie durchläuft, aber nur das letzte Ergebnis zurückgibt. Irgendwelche Vorschläge?

Antwort

0

Momentan schreiben Sie nur die letzte Zeile, weil Sie die Variable lineToAppend innerhalb Ihrer for Schleife zurücksetzen. Sie fügen es jedoch nicht zu Ihrer output innerhalb Ihrer for Schleife hinzu. Daher ist es bis zum Ende Ihrer for Schleife und Schreiben der letzten Zeile.

Daher sieht es derzeit wie folgt aus: (der Kürze halber Verkürzte)

for ids in listOfPlaceIds: 
     url = "https://maps.googleapis.com/maps/api/place/details/json?placeid=%s&key=%s" % (ids,apiKey) 
     fn = ids + "-details.json" 
     urllib.urlretrieve(url,fn) 

     data = json.load(open(fn)) 
     lineToAppend = [] 
     lineToAppend.append(search) 

     ... 

    output.append(lineToAppend) 
    wr.writerows(output) 

Während es sein sollte:

for ids in listOfPlaceIds: 
     url = "https://maps.googleapis.com/maps/api/place/details/json?placeid=%s&key=%s" % (ids,apiKey) 
     fn = ids + "-details.json" 
     urllib.urlretrieve(url,fn) 

     data = json.load(open(fn)) 
     lineToAppend = [] 
     lineToAppend.append(search) 

     ... 

     output.append(lineToAppend) 
    wr.writerows(output) 
+0

, dass mein Problem gelöst, danke! – user6727195

Verwandte Themen