簡潔な回答
curlでSERP APIにクエリを送るにはどうすればよいですか?
curl -sG "https://serpcrypto.com/api/v1/search" -H "Authorization: Bearer $KEY" --data-urlencode "q=your query"を実行し、JSONをjqにパイプします。SerpCryptoでは、成功した検索1回につき1クレジット($0.30/1K検索から)、エラーは無料です。-Gはデータフラグをクエリ文字列に変換します。クレジットは暗号資産で支払い、KYC不要です。
ここで重要なcurlフラグはどれですか?
キーはシェルごとに一度export SERPCRYPTO_API_KEY=…で設定します。jqが無い場合はパッケージマネージャーからインストールしてください。
| フラグ | 理由 |
|---|---|
-s | サイレント:JSONにプログレスバーが混ざらないようにします。 |
-G | -dと--data-urlencodeの値をGETリクエストのクエリ文字列として送信します。 |
--data-urlencode | qとlocationのスペース、引用符、アクセント文字をエンコードします。 |
-H "Authorization: Bearer …" | あなたのAPIキー。環境変数に保管してください。 |
-w '%{http_code}' | HTTPステータスを出力します。呼び出しが失敗したときに便利です。 |
キーワードの上位10件のリンクを出力するにはどうすればいいですか?
オーガニック結果を取得し、jqで各結果の順位とリンクをタブ区切りで出力します。[]?形式では、ブロックが存在しない場合に失敗せず何も出力しないため、特殊なページでもスクリプトが静かに動作します。
# Top 10 organic links, one per line
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=kubernetes cost monitoring" -d gl=us -d hl=en \
| jq -r '.organic_results[]? | "\(.position)\t\(.link)"'People Also Askの質問を一覧表示するにはどうすればいいですか?
people_also_ask[].questionを読み取ります。質問はhlの言語に従い、glの国によって変わります。そのため、執筆対象の各市場で同じ検索クエリを実行してください。コンテンツチームはこのリストをそのままブリーフに貼り付けます。
# People Also Ask questions, ready for a content brief
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=how to brew cold brew" -d gl=gb -d hl=en \
| jq -r '.people_also_ask[]?.question'AI Overviewが引用しているソースを確認するにはどうすればいいですか?
ai_overview.referencesを読み取ります。このブロックは、Googleがその検索クエリと地域でAI Overviewを表示する場合にのみ存在するため、それ以外の場合はレシピが明確なメッセージを出力します。これらのソースを継続的に追跡することで、Googleの生成回答で自身のページが引用されているかがわかります。
# Sources cited by the AI Overview, if the page shows one
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=what is a heat pump" -d gl=us -d hl=en \
| jq -r 'if .ai_overview then .ai_overview.references[] | "\(.index)\t\(.source)\t\(.link)" else "no AI Overview for this query" end'ローカルパックとMapsのリストを取得するにはどうすればいいですか?
locationを使ったWeb検索は、検索結果ページに表示されるローカルパック(通常は数件のビジネス)を返します。engine=google_mapsは、住所・評価・レビュー数を含むより長いMapsのリストを返し、@tsvがそれをスプレッドシート用の行に変換します。どちらも1クレジットです。
# Local pack in a city, then the full Maps list for the same query
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=vegan restaurant" \
--data-urlencode "location=Toronto, Ontario, Canada" -d gl=ca -d hl=en \
| jq -r '.local_results[]? | "\(.position)\t\(.title)\t\(.rating // "-")"'
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
-d engine=google_maps --data-urlencode "q=vegan restaurant Toronto" -d gl=ca -d hl=en \
| jq -r '.local_results[]? | [.title, .address, .rating, .reviews] | @tsv'呼び出しが失敗したときにエラーを確認するにはどうすればいいですか?
-w '\nHTTP %{http_code}\n'を追加すると、ボディの後にステータスを出力します。エラーボディはcodeとmessageを含む小さなJSONです。エラーページに6つのコードがすべて記載されています。2番目のコマンドはクレジットを読み取るもので、無料です。
# Print the body, then the HTTP status on its own line
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=test" -w '\nHTTP %{http_code}\n'
# Credits left (free call)
curl -s "https://serpcrypto.com/api/v1/credits" -H "Authorization: Bearer $SERPCRYPTO_API_KEY" | jq .WindowsでのPowerShellの同等の方法は何ですか?
Invoke-RestMethodはリクエストを送信し、JSONをオブジェクトに解析するため、jqは不要です。パラメータは-Bodyのハッシュテーブルとして渡します。GETリクエストの場合、PowerShellがそれらをクエリ文字列にエンコードします。その後Format-Tableが順位、タイトル、リンクを出力します。
# Windows PowerShell 5.1 or PowerShell 7
$headers = @{ Authorization = "Bearer $env:SERPCRYPTO_API_KEY" }
$query = @{ q = "kubernetes cost monitoring"; gl = "us"; hl = "en" }
$data = Invoke-RestMethod -Uri "https://serpcrypto.com/api/v1/search" -Headers $headers -Body $query -Method Get
$data.organic_results | Select-Object position, title, link | Format-Table -AutoSizecurlからコードに移行すべきなのはいつですか?
キーワードのリストでコマンドを繰り返すようになったらすぐです。シェルループは数十件の検索には使えますが、リトライ、並列処理、保存はPythonやNode.jsの方が簡単です。リクエストは同じなので、ここでテストしたレシピはそのまま流用できます。各検索は1クレジットのままで、10,000検索パックでは$0.75/1K検索です。
curlの質問
curlで検索クエリが400エラーを返すのはなぜですか?
通常は、qが-dで送信され、エンコードが必要な文字が含まれているためです。クエリとlocationには--data-urlencode "q=…"を使用してください。gl=usのような単純なコードは-dのままで問題ありません。
完全なJSONをファイルに保存できますか?
はい。jqにパイプする代わりに-o result.jsonを追加します。生の回答を保存しておけば、検索に再度課金することなく後で再解析できます。
Windowsのcurlも同じように動作しますか?
Windows 10と11にはcurl.exeが含まれており、フラグも同じです。cmd.exeではクォートの扱いが異なるため、通常はPowerShellでInvoke-RestMethodを使う方が簡単です。