0

ipinfodb API を使用して、サイト訪問者の国コードを検索したいと考えています。

次を試すと、http://api.ipinfodb.com/v3/ip-country/?key=<My_API_Key>&ip=<Some_IP>次の出力が得られます。

OK;;<Some_IP>;US;UNITED STATES

この出力をフィルタリングして、国コードのみを表示するにはどうすればよいですか?

よろしく、 ティモシー

編集:

チャールズへの返事として、

Googleで検索した後、APIに「XMLとしてのフォーマット属性」を指定できることがわかったので、次のように機能します。

$xml = simplexml_load_file('http://api.ipinfodb.com/v3/ip-country/?key=<My_API>&format=xml&ip=<Some_IP>);

echo $xml->countryCode;

XML 引数なしで同じ出力を取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0
OK;;<Some_IP>;US;UNITED STATES

How do I filter this output so that it shows only the country code ?

I find it curious that you'd be able to invoke SimpleXML, but didn't think of explode, which will turn a string in into an array, splitting on the given delimiter. In this case, we need to explode on ;:

$string_data = 'OK;;127.0.0.1;US;UNITED STATES';
$sploded_data = explode(';', $string_data);
print_r($sploded_data);
echo "\nCountry code: ", $sploded_data[3], "\n";

This should emit:

Array
(
    [0] => OK
    [1] =>
    [2] => 127.0.0.1
    [3] => US
    [4] => UNITED STATES
)
Country code: US

You may wish to review the rest of the string manipulation functions to see if there's any other interesting things you may have missed.

于 2012-12-15T18:55:01.933 に答える
0

毎回同じ IP アドレスを明示的に指定した場合、サーバーの出力は静的なものにすぎないため、上記の回答は特に役に立ちません。特定の IP アドレスのロケーション リクエストをハードコードすると、毎回同じになります。ポイントは何ですか?

代わりにこれを行う

  • API 用の PHP クラスをインストールします。PHP クラス
  • ここにある PHP サンプルを試してみてください。独自の Web ページとして保存し、結果を観察します。「userlocation.php」としましょう。localhost からロードする場合、フィールドは null になることに注意してください。

さて、この出力を解析するトリックは array_values() です。これを理解するのに永遠にかかりましたが、最終的にこれに出くわしまし

そう...

$locations = array_values($locations);
echo $locations[n],"<br />\n";
echo $locations[n+1],"<br />\n";
etc.

必要な要素が何であれ、この方法で取得できます-そしてそれは動的です. このコードは、ユーザーの IP アドレスに関連する国を返します。

最後のメモ。API キーは、userlocation.php ではなくクラス ファイルに貼り付けてください。クラスファイル変数は保護されています。これは良いことです。

とにかく、私は専門家ではありません。私が学んだことを共有したいと思っただけです。

于 2015-02-01T06:17:57.093 に答える