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

作ったもの。
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