無料 IP 検索 API
完全無料、登録なしで利用できます(匿名利用には回数制限あり)。API キーで上限を拡張できます。JSON を返し、CORS に対応しています。
1. 自分の IP を調べる
GET /api/myip
呼び出し元のグローバル IP と所在地を返します。
2. 指定した IP を調べる
GET /api/ip?ip=8.8.8.8
任意パラメータ &key=あなたのAPIキー で上限を拡張できます。
3. ドメインを調べる(名前解決して IP ごとに所在地)
GET /api/ip?domain=baidu.com
ドメインが解決するすべての IP と、それぞれの所在地を返します。
4. コマンドライン向けプレーンテキスト
GET /ip
curl やシェルスクリプト向けに、JSON ではなく 1 行のテキストを返します。
$ curl https://www.i5p.com/ip 103.118.252.70 | 中国 香港 港島 | Alibaba Cloud $ curl "https://www.i5p.com/ip?ip=8.8.8.8" 8.8.8.8 | 美国 加利福尼亚州 山景城 | Google Cloud/DNS/DoH/DoT
パラメータなしで自分の IP、?ip= で指定した IP、?lang=en / ja で言語切替。
# プロキシ経由(認証なし)— プロキシの出口 IP が返ります curl -x http://127.0.0.1:8080 https://www.i5p.com/ip # プロキシに認証が必要な場合 curl -x http://user:password@127.0.0.1:8080 https://www.i5p.com/ip
SOCKS5 の場合は http:// を socks5:// に変えるだけです。プロキシが効いているか、出口がどこかを確認する最短の方法です。
レスポンス例
{
"code": 0,
"msg": "ok",
"data": {
"ip": "8.8.8.8",
"country": "アメリカ",
"province": "加利福尼亚州",
"city": "山景城",
"zip": "",
"isp": "Google Cloud/DNS/DoH/DoT"
}
}
5. QR コード生成
GET /qr/?data=テキスト
GET リクエストで image/png を直接返します。<img> タグにそのまま使えます。
基本パラメータ
| th_param | th_desc | th_req |
|---|---|---|
| data | QR コードの内容。必須、URL エンコードが必要、上限 1200 バイト。 | req_yes |
| size | 画像の一辺(ピクセル)、80–1200、既定 320。実際の出力はモジュールサイズの整数倍に切り下げるため、指定値より数ピクセル小さくなることがあります。こうすると各モジュールが整数ピクセルになり、読み取りが安定します。 | req_no |
| level | 誤り訂正レベル L(7%) / M(15%) / Q(25%) / H(30%)、既定 H。ロゴを入れる場合は必ず H を使ってください。中央が隠れて読めなくなることがあります。 | req_no |
| p | スタイル番号。プリセット番号(1–120)か、ログイン後に発行した専用番号(u7 など)。未指定なら白黒。 | req_no |
| format | png(既定、画像を返す)または base64(data URI を含む JSON を返す。フロントで src にそのまま入れられます)。 | req_no |
スタイルパラメータ(URL に直接書けます)
| th_param | th_desc |
|---|---|
| fg | 前景色(モジュールの色)、16 進数。例:%23e11d48(# は %23 にエスケープ)。 |
| bg | 背景色、同じ形式。 |
| fg2 | グラデーションの副色。grad が none 以外のときだけ有効。 |
| grad | グラデーション方向:none なし / h 水平 / v 垂直 / d 対角。 |
| shape | モジュール形状:square 四角 / dot 丸 / rounded 角丸。 |
| eye | 位置検出パターン 3 個の形状:square / rounded / circle。 |
| margin | クワイエットゾーン(モジュール数)、0–10、既定 2。余白が少なすぎると認識率が落ちます。 |
| text | 下部テキスト、最大 30 文字。空で渡す(&text=)と番号に設定されたテキストを明示的に消せます。 |
| text_color | 下部テキストの色、16 進数。 |
優先順位:URL が番号を上書き
p が指すスタイルをベースとし、URL に明示したパラメータが項目ごとに上書きします。指定しなかった項目は番号の設定がそのまま残ります。つまり p=u7&size=600 は「u7 のスタイルでサイズだけ 600」であり、u7 の色・モジュール形状・下部テキストはそのままです。p なしの場合のベースは白黒です。
唯一の例外がロゴです。サーバー上のファイルなので番号経由でしか付けられず、URL パラメータでは渡せません。ロゴ入りの QR が必要なら専用番号を発行してください。
3 つの使い方
- 直接呼び出し —
pなしで、スタイルを全部 URL に書く方法。登録せずその場で作りたいときに。 - プリセットテンプレート —
p=1〜p=120、120 種類の配色とモジュール形状。ログイン不要。テンプレートは配色と形状のみで、サイズ・ロゴ・下部テキストは含みません。 - 専用番号 — ログインしてQR コード生成ページでロゴや下部テキストまで調整し、「API スタイル番号を発行」で
u7のような番号を取得します。以後は?data=内容&p=u7だけで済み、スタイルの変更はマイ QR スタイルで一度直せば、その番号を使っている全ての場所に即反映されます。コードの修正は不要です。
ドメイン紐付け:p すら不要に
マイ QR スタイルでドメインを番号に紐付けると、そのドメインのページから来たリクエスト(Referer で判定)は data だけで紐付けたスタイルが自動適用されます。example.com を登録すれば www.example.com も対象になります。
例
<!-- 既定の白黒 --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com"> <!-- スタイルを直接指定:赤い丸モジュール+対角グラデーション --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&fg=%23e11d48&fg2=%23f59e0b&grad=d&shape=dot&eye=circle"> <!-- プリセット 82 番、サイズ 300 --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&size=300&p=82"> <!-- 専用番号(サイズ・色・ロゴ・下部テキストは番号側に保存済み) --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=u7"> <!-- 同じ番号で、今回だけサイズを 600 に --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=u7&size=600"> <!-- base64 で返す(フロントでそのまま利用) --> curl "https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=82&format=base64"
注意事項
- 返るのは画像なので JSON のエラーコードには従いません。パラメータが不正な場合は JSON の説明を返すため、
<img>内では画像切れとして表示されます。原因を見るにはその URL をブラウザで直接開いてください。 - 同じパラメータなら生成される画像は常に同一で、
ETagとCache-Control: max-age=86400が付きます。CDN やブラウザにキャッシュさせて問題ありません。 - 匿名利用には毎分の回数制限があります(管理画面で変更可、現在 1200 回/分)。超過すると
429を返します。 - 内容が長いほど、また誤り訂正レベルが高いほどモジュールは密になります。長い URL は短縮するか、レベルを
Mに下げてください。
全パラメータと動作確認はこちら: QRコード
6. バーコード生成
GET /bar/?data=テキスト&type=ean13
GET リクエストで image/png を直接返します。7 種類の一次元バーコードに対応。
data 内容(必須)、type は code128 / ean13 / ean8 / upca / code39 / itf / codabar(既定 code128)、w モジュール幅 1–8、h 高さ 20–400、fg/bg 色、text=0 で文字非表示。
<img src="https://www.i5p.com/bar/?data=6901234567892&type=ean13&w=3&h=140">
全パラメータと動作確認はこちら: バーコード
リクエスト署名
key を付けるリクエストには署名が必要です。api_secret は URL に一切現れません。ログや履歴からリンクが漏れても、次のリクエストを偽造できません。
key API キー、ts Unix タイムスタンプ(秒、許容 300 秒)、nonce 6–64 文字のランダム文字列(300 秒以内は再利用不可)、sign 署名値。X-Api-Key / X-Api-Ts / X-Api-Nonce / X-Api-Sign ヘッダーでも送れます。
アルゴリズム:sign と callback を除く全パラメータを名前の昇順に並べ、k1=v1&k2=v2 と連結(値は生のまま、URL エンコードなし)、api_secret で HMAC-SHA256、小文字 16 進で出力。
// PHP
$key = 'a1b2c3d4e5';
$secret = '你的secret';
$p = ['ip' => '8.8.8.8', 'key' => $key, 'ts' => time(), 'nonce' => bin2hex(random_bytes(6))];
ksort($p);
$base = [];
foreach ($p as $k => $v) { $base[] = "$k=$v"; }
$p['sign'] = hash_hmac('sha256', implode('&', $base), $secret);
echo file_get_contents('https://www.i5p.com/api/ip?' . http_build_query($p));
// Node.js
const crypto = require('crypto');
const key = 'a1b2c3d4e5', secret = '你的secret';
const p = { ip: '8.8.8.8', key, ts: Math.floor(Date.now() / 1000),
nonce: crypto.randomBytes(6).toString('hex') };
const base = Object.keys(p).sort().map(k => `${k}=${p[k]}`).join('&');
p.sign = crypto.createHmac('sha256', secret).update(base).digest('hex');
const url = 'https://www.i5p.com/api/ip?' + new URLSearchParams(p);
fetch(url).then(r => r.json()).then(console.log);
#!/bin/bash KEY="a1b2c3d4e5"; SECRET="你的api_secret" IP="8.8.8.8"; TS=$(date +%s); NONCE=$(head -c6 /dev/urandom | xxd -p) BASE="ip=$IP&key=$KEY&nonce=$NONCE&ts=$TS" # キー名の昇順に並べ済み SIGN=$(printf '%s' "$BASE" | openssl dgst -sha256 -hmac "$SECRET" -r | cut -d' ' -f1) curl "https://www.i5p.com/api/ip?$BASE&sign=$SIGN"
キーはマイページで作成します。管理側で「署名必須」を無効にした場合は key のみでも利用できます(非推奨)。
CORS と JSONP
すべての JSON エンドポイントは Access-Control-Allow-Origin: * を返すため、fetch/XHR でクロスオリジン利用できます。?callback=関数名(または jsonp=)で JSONP としても取得できます。
<script src="https://www.i5p.com/api/myip?callback=showIp"></script>
<script>function showIp(r) { console.log(r.data.ip); }</script>
補足
codeが 0 なら成功、0 以外はエラー(400 パラメータ不正 / 401 キー無効 / 429 制限超過 / 403 アクセス制限)。- 匿名:5 QPS、1 日 200000 回/IP。API キー利用時:5 QPS、1 日 5000000 回。
- QR・バーコードは画像を返すため上記の JSON エラーコードには従いません。パラメータ不正時のみ JSON でエラーを返します。
- 上限を増やすには、アカウント登録 のうえマイページで API キーを作成してください。