Programmable Search Engineを使ってみよう。
目次
はじめに
唐突ですが、人力でブログを書くのには限界があるため、ある程度記事を自動生成していきます。 このブログは半分ぐらいはワイの趣味になっているので人力で更新しつつ、アフェリエイトや広告収入を稼ぐため 流行りの時事ネタ記事を書いてくれるプログラムを作ります。
完全自動ブログ生成プログラムを作っていきましょう。
Programmable Search Engine
Googleはスクレイピングして、検索するのは禁止されてます。 なので用意されているAPIを使って合法的に情報収集します。
ここからAPIキーを作ってカスタム検索JSON APIを取得します。
料金は、1日100件の検索クエリを無料で回せます。
APIの準備
検索エンジンを作成して、「検索エンジンID」を取得します。
ここまでできたら準備OKです。
コード実装
Custom Search APIを使ってGoogle検索結果を取得する 上記の記事を参考に作ります。
pip install --upgrade google-api-python-client
正直、やりたいことは上記のコード使うのみでできたので一部書き換えて実行します。
if __name__ == '__main__':
searchWord = sys.argv[1]
target_keyword = searchWord
getSearchResponse(target_keyword)
得られたJSON
ディズニークリスマスで検索した結果をJSONにて取得しました。 あとはこれをいい感じに加工するだけです。
{
"snapshot_ymd": "20221223",
"snapshot_timestamp": "2022/12/23 02:06:49",
"response": [
{
"kind": "customsearch#search",
"url": {
"type": "application/json",
"template": "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"
},
"queries": {
"request": [
{
"title": "Google Custom Search - ディズニークリスマス",
"totalResults": "43400000",
"searchTerms": "ディズニークリスマス",
"count": 10,
"startIndex": 1,
"language": "lang_ja",
"inputEncoding": "utf8",
"outputEncoding": "utf8",
"safe": "off",
"cx": "241931c4cd5cf47c0"
}
],
"nextPage": [
{
"title": "Google Custom Search - ディズニークリスマス",
"totalResults": "43400000",
"searchTerms": "ディズニークリスマス",
"count": 10,
"startIndex": 11,
"language": "lang_ja",
"inputEncoding": "utf8",
"outputEncoding": "utf8",
"safe": "off",
"cx": "241931c4cd5cf47c0"
}
]
},
"context": {
"title": "Engine"
},
"searchInformation": {
"searchTime": 0.51026,
"formattedSearchTime": "0.51",
"totalResults": "43400000",
"formattedTotalResults": "43,400,000"
},
"items": [
{
"kind": "customsearch#result",
"title": "【公式】東京ディズニーランド スペシャルイベント「ディズニー ...",
"htmlTitle": "【公式】東京ディズニーランド スペシャルイベント「<b>ディズニー</b> ...",
"link": "https://www.tokyodisneyresort.jp/treasure/christmas2022/tdl/",
"displayLink": "www.tokyodisneyresort.jp",
"snippet": "東京ディズニーランドでは、11月8日(火)から12月25日(日)の48日間、スペシャルイベント「ディズニー・クリスマス」を開催します。",
"htmlSnippet": "東京ディズニーランドでは、11月8日(火)から12月25日(日)の48日間、スペシャルイベント「<b>ディズニー</b>・<b>クリスマス</b>」を開催します。",
"cacheId": "6rLJvCqqcCMJ",
"formattedUrl": "https://www.tokyodisneyresort.jp/treasure/christmas2022/tdl/",
"htmlFormattedUrl": "https://www.tokyo<b>disney</b>resort.jp/treasure/christmas2022/tdl/",
"pagemap": {
"cse_thumbnail": [
{
"src": "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQOy8hK-OG2KUeugXRUI-om50Z6gbeCP1M1wSI0TFlv7_0mjiD2S348HEy6",
"width": "310",
"height": "163"
}
],
"metatags": [
{
"og:image": "https://www.tokyodisneyresort.jp/treasure/christmas2022/tdl/assets/img/ogp.jpg",
"og:type": "website",
"og:site_name": "東京ディズニーリゾート",
"viewport": "width=device-width, initial-scale=1, viewport-fit=cover",
"og:title": "【公式】東京ディズニーランド スペシャルイベント「ディズニー・クリスマス」 | 東京ディズニーリゾート",
"og:url": "https://www.tokyodisneyresort.jp/treasure/christmas2022/tdl/",
"og:description": "東京ディズニーランドでは、11月8日(火)から12月25日(日)の48日間、スペシャルイベント「ディズニー・クリスマス」を開催します。"
}
],
"cse_image": [
{
"src": "https://www.tokyodisneyresort.jp/treasure/christmas2022/tdl/assets/img/ogp.jpg"
}
]
}
}
]
]
}
こんな感じでJSONが取得できました。 JSONが取得できたらあとは要素毎に抽出するのみです。
これも上記Qiita記事引用で良いですね。
次回はGPT-J-6b使って行きます。
まとめ
このブログほんと記事の質がゴミカスなんですが、まぁたまには良いでしょう。 今回のは特にひどいですね。