サジェストを網羅的に取得するツールを自作した
作ったもの。
Suggests Scraper
SEO対策を考える際などGoogleのサジェストを網羅的に取りたいということがある。
ただこれを満たす某ツールが回数制限があり扱いづらかったので自作することにした。
特に他人に使われることを想定していないがSEO系の記事を眺めていると日本語圏内は某ツールがデファクトスタンダードという感じで需要はありそう。
問題はどのようにGoogleのサジェストを取るかというところだがこれには以下のようなAPIがある。
https://www.google.com/complete/search?ie=utf-8&oe=utf-8&output=toolbar&q=react
何に使われているものかは知らないがとりあえずサジェスト自体の取得はできる。
xml形式のみだが以前はjson形式での取得もできていたらしい。
公式で提供されたAPIではないのでいつまで使えるのかはわからない。
TypeScript(JavaScript)でfetchからとxmlのパースまで行うコードは以下。
import { XMLParser } from "fast-xml-parser"; const getSuggests = async (query) => { const url = "http://www.google.com/complete/search"; const params = { q: query, hl: "ja", ie: "utf_8", oe: "utf_8", output: "toolbar", }; const headers = { "Content-Type": "text/xml; charset=UTF-8", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0", }; try { const response = await fetch(`${url}?${new URLSearchParams(params)}`, { headers }); const text = await response.text(); const parser = new XMLParser({ ignoreDeclaration: true, ignoreAttributes: false, }); const obj = parser.parse(text); return obj.toplevel.CompleteSuggestion.map((v) => v.suggestion["@_data"]) } catch { return []; } };
キモはuser-agentを適当なブラウザに偽装しておくことでこれがないとうまく値が取れない、ややハマった。
プロジェクトのコードは以下リポジトリにて。
GitHub - auhulu/suggests
カメラを買った
散歩用にカメラがあればちょっと楽しくなるかなとカメラを買った。
色々あって手元にはKiss X6i、EF-S18-55mm F3.5-5.6 IS(キットレンズ)、EF50mm F1.8 II(撒き餌レンズ)があるのだが、Kissといえどゴツすぎてちょっと持ち出す気になれなかったので。性能自体はこれで十分ではあった。
おもちゃ的なノリなので安いので。はじめは中古の高級コンデジを見ていて、かつて使っていたDP(無印)やGRとかがいいかなと思っていたけど案外中古相場が高くってコスパ感に欠けるので見送った。DP2は7、8年ほど前に買ったときより値段は上がってそう。あれよかったもんな。
ミラーレスまで広げてみると10年以上前の機種ではあるがNEX-5がめちゃ軽めちゃ安でいいなと思った。ボディのみなら1万弱で落ちてる。
ただその周辺を調べてみると、その次の次の機種であるNEX-5R(T)だとキットレンズがさらにコンパクトで趣旨からしてベストだったのでこれにした。メルカリで中古のレンズキットを2万で購入。
キットレンズをつけてもゴツめのコンデジくらいのサイズ感。普段のバッグに放り込める感じでいい。
ちょっと触ってみたところAFも十分早いし、操作性も問題なし、液晶がもうちょいキレイだったらなおよかったかな。
とはいえ継続的に自分が出先で写真を撮ったりできるのかかなり怪しい、殆ど使わずに終わるのかも。