コンテンツへスキップ
ArchiLinks
ArchiLinks$100無料取得

スケジュール可能なウェブサイトバックリンクチェッカーツール:スクリプト

ここでの呼び出しはすべてcurlまたは任意のHTTPクライアントで動作します。キーを置き換え、パターン(呼び出し、保存、差分)を維持してください。

ArchiLinksリサーチチーム ·

はしごとタイマーのそばにPython、Node、Bashツールを備えたミニチュア作業台

基本ルール

1回の呼び出しで1回課金されます。行数に関係なく、各リクエストは1回だけ課金され、1回の呼び出しで最大1,000行が返されます。深いページネーションは50,000行で停止し、perパラメータは10から5,000の値を受け付けます。

これはスクリプトの書き方を変えます。per=1000を指定し、必要に応じてのみページネーションを行ってください。小さなページで構築されたウェブサイトバックリンクチェッカーツールは、恩恵なしにコストを10倍に増やします。エラーは明確です:キーがない場合はHTTP 401、クレジットが尽きた場合は402、すべてのJSONボディにはokが含まれます。

自動化の前に

小さなドメインに対してスクリプトを手動で1回実行し、JSONを読み取ってください。キー名、行コンテナ、ページネーションフィールドは、当社の例ではなく実際のレスポンスから取得すべきです。cronジョブがそれらに依存する前に確認してください。

Python:日付付きスナップショットの保存

レスポンス内のフィールド名は例として示されています。キーに依存する前に1つのレスポンスを出力してください。

python
import json, sys, datetime, requests

BASE = "https://archilinks.com/api.php"
KEY = "sk_live_..."

def snapshot(domain, action="refdomains"):
    r = requests.get(BASE, params={"action": action, "q": domain, "per": 1000, "key": KEY}, timeout=30)
    if r.status_code in (401, 402):
        sys.exit(f"API said {r.status_code}: check key or balance")
    r.raise_for_status()
    body = r.json()
    assert body.get("ok"), body
    name = f"{domain}-{action}-{datetime.date.today()}.json"
    json.dump(body, open(name, "w"), indent=1)
    print(name, body.get("_credits"))

snapshot(sys.argv[1])

Node:リストのドメインラティング一括取得

bulk_drは1回の呼び出しで1クレジット、最大2,000ドメインを受け付けます。GETでdomainsパラメータを使用するか、POSTボディで送信します。以下のカンマ区切りは例です。まず2つのドメインでテストしてください。Node 18以降にはfetchが組み込まれています。

javascript
const domains = ["example.com", "example.org"];
const url = new URL("https://archilinks.com/api.php");
url.search = new URLSearchParams({
  action: "bulk_dr",
  domains: domains.join(","),
  key: "sk_live_...",
});

const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(JSON.stringify(await res.json(), null, 2));

Bashとjq:週次差分

日付付きでスナップショットを保存し、2つのファイルを比較します。cronを週次または月次で維持してください。インデックスは約月次で更新されます。

bash
# crontab: 0 6 1 * *  /opt/seo/pull.sh old-shop.com
curl -s "https://archilinks.com/api.php?action=refdomains&q=$1&per=1000&key=$KEY" \
  | jq -S . > "snap-$1-$(date +%F).json"

# compare two dated files
diff <(jq -S . snap-old-shop.com-2026-09-01.json) <(jq -S . snap-old-shop.com-2026-10-01.json) | head -50

どのアクションをどのスクリプトに

スクリプトアクション実行あたりのコスト出力
移行ベースラインtoppages, refdomains4クレジット2つのJSONファイル
アウトリーチのクリーニングbulk_dr1クレジット/呼び出し、最大2,000ドメイン各見込み客のDR
競合重複intersect2クレジット2〜10ドメインにリンクするサイト
アンカー監視anchors2クレジットアンカーテキストリスト
ポートフォリオチェックcompare1クレジット/呼び出し、最大20ドメイン並列メトリクス
ラバークッション、警報ベル、積み重ね式コインカウンターを備えたミニチュアリトライ機構

エッジケースの処理

スクリプトはエッジケースで失敗します。それらを見越して計画を立ててください。

各呼び出しをリトライラップで囲み、3回試行後にタイムアウトするまで待機します(401と402はリトライでは解決しないため除く)。すべての認証済みレスポンスから_creditsオブジェクトをログに記録し、支出の急増が残高に現れる前にログに現れるようにしてください。ループにはハードなページ数の上限を設定してください。

ファイル名に日付を含めてスナップショットをgitまたはオブジェクトストレージに保存してください。シンプルで退屈ですが効果的です。移行には、これらのスクリプトをリダイレクトマップレシピおよび移行チェックリストと組み合わせてください。Google Sheetsユーザーは、Apps ScriptのUrlFetchAppから同じURLを呼び出すことができ、月次トリガー付きのシートは完璧なモニターになります。

スクリプトに関する質問

スクリプトが本番環境に導入される前に頻繁に3つの質問が寄せられ、それぞれに短い回答があります。

無料で自分のサイトのバックリンク数をどうやって確認すればいいですか?

キーなしでoverviewまたはstatsアクションを呼び出してください。両方とも無料で、当社のリンクインデックスからの合計を返します。

合計値の背後にあるリストには、キーと1回呼び出しあたり2クレジットが必要です。

残高が尽きたらどうなりますか?

APIはHTTP 402を返します。スクリプトはループでリトライするのではなく、停止してアラートを出す必要があります。アカウントページからUSDT(TRC-20)でチャージし、再実行してください。

ブラウザから呼び出せますか?

はい。CORSはオープンです。ただし、誰でもキーを読み取ってクレジットを消費できるため、公開フロントエンドコードにキーを配置しないでください。

単一のキーで効率的に金貨を移動する精密なギアを備えたミニチュアコンベアベルト

クレジットを無駄にしないページネーション

ページネーションは、スクリプトが想定より多くのコストがかかる場所です。各ページリクエストは個別の呼び出しであり、独自の課金対象となるため、1ページ余分に要求するループは無駄な支払いにつながります。

ループを書く前に、実際のレスポンスからページネーションフィールドを読み取ってください。このサイトの例は形状を示していますが、名前と停止信号はライブJSONから取得します。

ページが短く返されたら停止する

要求した行数よりも少ない行数のページは、通常が最後のページです。追加のページを要求して確認するのではなく、ループをそこで停止させてください。

レスポンスにtotalまたはnext-pageフィールドが含まれている場合は、それを停止信号として使用してください。保存した行数をそれに対してカウントし、不一致がログに現れるようにしてください。

すべてのループに上限を設定する

すべてのループにページ数のハード上限を設定してください。フィールド名が変更され、スクリプトが同じページを要求し続けた場合、この上限が残高を保護します。

期待されるサイズから上限を選択し、実際のドメインにさらにページが必要な場合に意図的に引き上げてください。

到着するたびにページを書き出す

ページが戻ってきたらすぐにディスクに保存し、ファイル名にページ番号を含めてください。ページ40で停止したスクリプトは、再始動して2回支払うのではなく、最後に保存されたファイルから再開できます。

ドメインごと、日付ごとに1つのフォルダにファイルを保持し、再実行時に2回のプルが混ざらないようにしてください。

スクリプトのスケジュール実行

任意のスケジューラーで構いません。重要なのは、各実行がファイルを残し、失敗した実行が誰かに通知することです。

ジョブ用のホストの選択

Cronはディスクを制御できるサーバーに適しています。CIジョブは、すでにスナップショットを保持しているリポジトリに適しており、履歴がそれを読み込むコードの隣に存在します。

どちらを選択しても、ドメインリストをファイルに保持してください。ドメインの追加はスクリプトの変更ではなく編集として行えるようにします。

すべての成功ではなく、失敗のアラート

スクリプトが失敗した場合、または残高が選択したレベルを下回った場合にアラートを出してください。毎朝の成功メッセージは、人々が実際の問題が伝わるチャネルを無視するよう訓練することになります。

Pythonの例のように、各実行から_creditsオブジェクトをログに記録し、月次で傾向を確認してください。

5つのステップで週次差分を取得

01

アクションを選択する

質問に答える2〜3つの呼び出しを選択してください。それぞれクレジットコストがかかるため、横にコストを記載してください。

02

生レスポンスを保存する

ドメインと日付をファイル名に含め、到着したままのJSONを保存してください。フォーマットは差分ステップまで待ってください。

03

比較前にキーをソートする

jq -Sまたは同等のものを使用して、キーの順序が変更として表示されないようにしてください。上記のbash例ではこれを行っています。

04

ファイルではなくリストを比較する

URLまたはドメインで2つのレスポンスを結合し、追加、削除、変更されたものを報告してください。長いファイルの生テキスト差分はアクションを起こしにくいです。

05

差分を確認し、行動を起こす

リンク元ドメインが削除された場合はアウトリーチ担当者に、ページが削除された場合はリダイレクト担当者に送信してください。

cronジョブがスクリプトに依存する前にスクリプトをテストする

無人で実行されるスクリプトはまず自身を証明すべきです。小さなドメインを1つ使用し、完全なJSONを読み取り、その後リストを広げてください。

素早い健全性チェックは、同じドメインの無料overview呼び出しとの合計を比較することです。数字が有料リストと完全に一致する必要はありませんが、規模で一致すべきです。

2つのドメインで実行する

2つのドメインはループ、ファイル名、エラーパスをテストします。1つのドメインでは偶然パスできるかもしれませんが、2つはループがドメイン間でリセットされるかどうかを示します。

よく知っているドメインと知らないドメインの1つを使用し、出力が正しいかどうかを判断できるようにしてください。

キーをログやチケットから除外する

スクリプトはしばしば完全なリクエストアドレスを出力し、キーはそのアドレスのパラメータとして含まれます。サーバーから出る行からキーを削除するか、Authorizationヘッダーで送信してください。これにより、アドレスからキーを除外できます。

キーがチケットまたは公開リポジトリに表示された場合、次の実行前にそれを使用しているスケジュールジョブを停止してください。

キーの場所、それを読み取るスクリプト、それらが呼び出すホストの短いメモを保持してください。そのメモは、誰が残高を消費できるかを誰かが尋ねたときに必要なものです。

各質問に対するアクションの選択

エンドポイントリストではなく、質問から始めてください。移行にはリンクを含むURLを知る必要があり、アウトリーチリストにはドメインスコアが必要です。1つのホスト、2つの質問。それぞれが異なる数のクレジットを要します。

コードを書く前に質問の横にコストを記載してください。週次で実行されるスクリプトは小さな価格を52倍に増やしますが、残高がそれを示すまでその乗算は忘れられがちです。

適切に停止するリトライ

タイムアウトやサーバーエラーなどの一時的な理由で失敗したリクエストは、試行間の待機時間を長くしながら数回リトライしてください。401または402は、待っても答えが変わらないためリトライしないでください。

アクションとドメインを付けてすべてのリトライをログに記録し、失敗のパターンが沈黙ではなくパターンとして現れるようにしてください。

リトライ回数を1か所に設定し、スクリプト内のすべての呼び出しが同じルールに従うようにしてください。散在するリトライループは互いに矛盾しがちで、その不一致はログで見つけるのが難しいです。