2016-04-05 10 views
3

私はsearch volume data and trends through their TargetingIdeaSelectorPython client libraryを使用して取得するアドワーズ広告APIを照会すると返されたデータは、次のようになります。AdWords API TargetingIdeaPageサービスから返されるデータ形式は何ですか?

(TargetingIdeaPage){ 
     totalNumEntries = 1 
     entries[] = 
      (TargetingIdea){ 
      data[] = 
       (Type_AttributeMapEntry){ 
        key = "KEYWORD_TEXT" 
        value = 
         (StringAttribute){ 
         Attribute.Type = "StringAttribute" 
         value = "keyword phrase" 
         } 
       }, 
       (Type_AttributeMapEntry){ 
        key = "TARGETED_MONTHLY_SEARCHES" 
        value = 
         (MonthlySearchVolumeAttribute){ 
         Attribute.Type = "MonthlySearchVolumeAttribute" 
         value[] = 
          (MonthlySearchVolume){ 
           year = 2016 
           month = 2 
           count = 2900 
          }, 
          ... 
          (MonthlySearchVolume){ 
           year = 2015 
           month = 3 
           count = 2900 
          }, 
         } 
       }, 
      }, 
    } 

これはJSONではなく、単なる厄介Pythonのリストのように見えます。毎月のデータをこのような構造のPandasデータフレームにまとめる最も簡単な方法は何ですか?

Keyword   | Year | Month | Count 
keyword phrase 2016  2  10 

答えて

3

出力がスーパーオブジェクトです。このコードでは、このコードがトリックを行うことがわかりました:

import suds.sudsobject as sudsobject 
import pandas as pd 
a = [sudsobject.asdict(x) for x in output] 
df = pd.DataFrame(a) 
+0

私の遅れに反応して申し訳ありません!説明をありがとう!これを行うにはもっと簡単なコード! – JohnSG

0

ここで私はrequestType STATSと、TargetingIdeaSelectorを照会するために使用完全なコード、そして私が使用可能なデータフレームにデータを解析するために使用される方法です。上記の質問で与えられた出力を取り、それをデータフレームに変換するので、「pandas dataframeへの解析結果」セクションに注目してください。おそらく最速ではなく、最高ではありませんが、動作します! Python 2.7でテストされています。

"""This code pulls trends for a set of keywords, and parses into a dataframe. 

The LoadFromStorage method is pulling credentials and properties from a 
"googleads.yaml" file. By default, it looks for this file in your home 
directory. For more information, see the "Caching authentication information" 
section of our README. 

""" 

from googleads import adwords 
import pandas as pd 


adwords_client = adwords.AdWordsClient.LoadFromStorage() 

PAGE_SIZE = 10 

# Initialize appropriate service. 
targeting_idea_service = adwords_client.GetService(
    'TargetingIdeaService', version='v201601') 

# Construct selector object and retrieve related keywords. 
offset = 0 
stats_selector = { 
    'searchParameters': [ 
     { 
      'xsi_type': 'RelatedToQuerySearchParameter', 
      'queries': ['donald trump', 'bernie sanders'] 
     }, 
     { 
     # Language setting (optional). 
     # The ID can be found in the documentation: 
     # https://developers.google.com/adwords/api/docs/appendix/languagecodes 
      'xsi_type': 'LanguageSearchParameter', 
      'languages': [{'id': '1000'}], 
     }, 
     { 
      # Location setting 
      'xsi_type': 'LocationSearchParameter', 
      'locations': [{'id': '1027363'}] # Burlington,Vermont 
     } 
    ], 
    'ideaType': 'KEYWORD', 
    'requestType': 'STATS', 
    'requestedAttributeTypes': ['KEYWORD_TEXT', 'TARGETED_MONTHLY_SEARCHES'], 
    'paging': { 
     'startIndex': str(offset), 
     'numberResults': str(PAGE_SIZE) 
    } 
} 

stats_page = targeting_idea_service.get(stats_selector) 


########################################################################## 
# Parse results to pandas dataframe 


stats_pd = pd.DataFrame() 

if 'entries' in stats_page: 
    for stats_result in stats_page['entries']: 
     stats_attributes = {} 
     for stats_attribute in stats_result['data']: 
      #print (stats_attribute) 
      if stats_attribute['key'] == 'KEYWORD_TEXT': 
       kt = stats_attribute['value']['value'] 
      else: 
       for i, val in enumerate(stats_attribute['value'][1]):     
        data = {'keyword': kt, 
          'year': val['year'], 
          'month': val['month'], 
          'count': val['count']} 
        data = pd.DataFrame(data, index = [i])     
        stats_pd = stats_pd.append(data, ignore_index=True) 


print(stats_pd) 
+0

このコードでは、テストアカウントから生成された認証情報を使用していますか?もしそうなら、結果は意味がありますか?私が読んだところでは、テストアカウントは「ダミー」データを生成しています。ありがとう - クリス –

+0

私は実際のアカウントを使用しており、データは確かに意味があります。テストアカウントを使用しているときに何が起こるかはコメントできません。つまり、アカウント設定が返される結果にどのように影響するかは不明であるため、実際のアカウントを使用する必要があることが懸念されます。 – JohnSG

+0

ありがとうございます。私の理解は、TOSなどの悪用/違反を防ぐためにGoogleが実際のデータへのアクセスを制限するため、テストアカウントはダミーの結果を返すということです。 –

関連する問題