サジェストを網羅的に取得するツールを自作した

作ったもの。
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といえどゴツすぎてちょっと持ち出す気になれなかったので。性能自体はこれで十分ではあった。

X6i EF50mm F1.8 II
おもちゃ的なノリなので安いので。はじめは中古の高級コンデジを見ていて、かつて使っていたDP(無印)やGRとかがいいかなと思っていたけど案外中古相場が高くってコスパ感に欠けるので見送った。DP2は7、8年ほど前に買ったときより値段は上がってそう。あれよかったもんな。
DP2
ミラーレスまで広げてみると10年以上前の機種ではあるがNEX-5がめちゃ軽めちゃ安でいいなと思った。ボディのみなら1万弱で落ちてる。
ただその周辺を調べてみると、その次の次の機種であるNEX-5R(T)だとキットレンズがさらにコンパクトで趣旨からしてベストだったのでこれにした。メルカリで中古のレンズキットを2万で購入。
NEX-5R E PZ 16-50mm F3.5-5.6 OSS
キットレンズをつけてもゴツめのコンデジくらいのサイズ感。普段のバッグに放り込める感じでいい。
ちょっと触ってみたところAFも十分早いし、操作性も問題なし、液晶がもうちょいキレイだったらなおよかったかな。

とはいえ継続的に自分が出先で写真を撮ったりできるのかかなり怪しい、殆ど使わずに終わるのかも。

ブログを作った

非公開のScrapboxに独りよがりなメモを貯め続けているのも不健康な気がして、ふとブログでもやるかという気になった。

以前、他人に見せる用のテキストについてはMarkdownで管理していてJekyllとGithub Pagesで運用していて、これを勉強がてらNextyやらAstroやらで置き換えたりとチマチマ弄ったりしていたが、デザインやら、画像周りやら、OGPやら細かいところを考えていくにつれすべてが面倒になって、結局はてなでブログを作ることにした。

なんというか当たり前だが至れり尽くせりで素晴らしい。