511 人が現在オンライン
511 人が現在オンライン
Google AdWords の広告効果を高めるためのヒントや施策などについて、ユーザー同士で意見交換ができます。運用者ならではの質問や回答を投げかけ合って、より効果を高められるような最適化のアイディアを得ましょう。
ガイドを表示
star_border
返信
Highlighted

Adwords APIを使ったキーワードボリュームの調べ方

[ 編集済み ]
初級者 ✭ ✭

 adwords APIのサンプルコード「get_keyword ideas」を使って下記のコードを書いたところ

[RateExceededError <rateName=RATE_LIMIT, rateKey=null, rateScope=ACCOUNT, retryAfterSeconds=30>]

このような↑エラーが出ました。5個ぐらいキーワードを調べると出てきてしまいます。time.sleepが3秒では不十分なのでしょうか?

何が問題なのかわからず、解決策をおしえていただけませんでしょうか? なおアカウントのアクセス権はスタンダードです。

 

from googleads import adwords
import time
import csv

PAGE_SIZE = 100

def main(client,keywords):
# Initialize appropriate service.
targeting_idea_service = client.GetService(
'TargetingIdeaService', version='v201710')
# Construct selector object and retrieve related keywords.
offset = 0
selector = {
'searchParameters': [
{
'xsi_type': 'RelatedToQuerySearchParameter',
'queries': keywords
},
{
# 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': '1005'}]
},
{
# Network search parameter (optional)
'xsi_type': 'NetworkSearchParameter',
'networkSetting': {
'targetGoogleSearch': True,
'targetSearchNetwork': False,
'targetContentNetwork': False,
'targetPartnerSearchNetwork': False
}
},
{
'xsi_type': 'LocationSearchParameter',
'locations': [{'id':'2392'}]
}
],
'ideaType': 'KEYWORD',
'requestType': 'STATS',
'requestedAttributeTypes': ['KEYWORD_TEXT', 'TARGETED_MONTHLY_SEARCHES']
,'paging': {
'startIndex': str(offset),
'numberResults': str(PAGE_SIZE)
}
}
more_pages = True
while more_pages:
page = targeting_idea_service.get(selector)

# Display results.
if 'entries' in page:
for result in page['entries']:
attributes = {}
for attribute in result['data']:
attributes[attribute['key']] = getattr(attribute['value'], 'value','0')
print ('Keyword with \'%s\' text and average monthly search volume '
'\'%s\''
% (attributes['KEYWORD_TEXT'],
attributes['TARGETED_MONTHLY_SEARCHES']))

else:
print('No related keywords were found.')
offset += PAGE_SIZE
selector['paging']['startIndex'] = str(offset)
more_pages = offset < int(page['totalNumEntries'])


if __name__ == '__main__':
# Initialize client object.
adwords_client = adwords.AdWordsClient.LoadFromStorage()
with open("./keyword.csv", mode="r", encoding="UTF-8") as f:
reader = csv.reader(f)
for row in reader:
main(adwords_client, row)
time.sleep(3)

 

1 人のエキスパートが返信verified_user
1 件の受理された解決策

受理された解決策
ベストアンサーのマーク済み.
解決策
トピック作成者MP4-13さんが付与
2月

Re: Adwords APIを使ったキーワードボリュームの調べ方

トップコントリビューター
レート制限に関する資料は
https://developers.google.com/adwords/api/docs/guides/rate-limits?hl=ja
になります。
これによると、「1秒あたりの多数のリクエストが送信される場合は、」とあるので、十分に有り得る結果かと思います(他にもrateExceededErrorについて詳しく書かれているので、一読するのが良いと思います)。


また、「5つしかキーワードを取得できない」と有りますが、プログラム上は、「結果が複数ページに渡る場合は、全ページ取得する」ように書かれていますが、取得しているページ数(=APIのリクエスト数)はどうなっていますか?

元の投稿で解決策を見る

Re: Adwords APIを使ったキーワードボリュームの調べ方

トップコントリビューター
エラーメッセージに従ってみてはいかがでしょうか。

AdwordsのAPIは、RateExceededErrorには必ず「retryAfterSeconds」という項目が付いています。なので、try構文を使って、RateExceededErrorを捕捉し、retryAfterSecondsの秒数だけsleepした上で、再度戻って処理をやり直す、というコードに改修することで、無駄にsleepすることなく、RateExceededErrorを綺麗に回避できるようになります。

Re: Adwords APIを使ったキーワードボリュームの調べ方

[ 編集済み ]
初級者 ✭ ✭

ご確認、ご助言誠にありがとうございます。 追加になりますが、知識が乏しいため質問させてください。今回5つキーワードを取得した後、retryAfterSeconds=30 というエラーがでましたが、これは実態として実質「30秒ごとに5つしかキーワードを取得できない」可能性もある、ということになりますでしょうか? 

APIのレスポンスが実態としてこのスピードだと、大量のキーワードのデータを取得することが困難なため、実際にはどの程度のリソース制限なのか、わかりましたら教えていただけると幸いです。

ベストアンサーのマーク済み.
解決策
トピック作成者MP4-13さんが付与
2月

Re: Adwords APIを使ったキーワードボリュームの調べ方

トップコントリビューター
レート制限に関する資料は
https://developers.google.com/adwords/api/docs/guides/rate-limits?hl=ja
になります。
これによると、「1秒あたりの多数のリクエストが送信される場合は、」とあるので、十分に有り得る結果かと思います(他にもrateExceededErrorについて詳しく書かれているので、一読するのが良いと思います)。


また、「5つしかキーワードを取得できない」と有りますが、プログラム上は、「結果が複数ページに渡る場合は、全ページ取得する」ように書かれていますが、取得しているページ数(=APIのリクエスト数)はどうなっていますか?

Re: Adwords APIを使ったキーワードボリュームの調べ方

初級者 ✭ ✭
ありがとうございました。こちら、解決いたしました。1回のリクエストで、1つのリストにして渡してしまえば問題ありませんでした。(700キーワードのリクエストをかけましたが、検索ボリュームが存在しているものが50程度しかなく、ページサイズを100にしてましたので1回のページで収まって、無事終わりました)。
ご教授、どうもありがとうございました!