0

私は、画像検索で Google の画像に対する最良の推測を読み取る小さなコードを作成しています。

リンクをクリックして、私が話していることを確認してください。 http://images.google.com/searchbyimage?image_url=http://static.filestube.com/files/images/logo3.gif

リンクをクリックすると、次のような結果が表示されます: この画像の最良の推測: filestube のロゴ

最良の推測を引っ張って返すことができるようにしたい

これが機能しない私のコードです

$ch = curl_init("http://images.google.com/searchbyimage?image_url=http://static.filestube.com/files/images/logo3.gif");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_exec($ch);
curl_close($ch);
preg_match("Best guess for this image:&nbsp;(.*)</a>", $result, $matches);
if(empty($matches)){
    echo("No guess on this image. <br />");
} else{
    echo("Best guess for this image:");
    print_r($matches);
}

私は推測を返し続けます

4

3 に答える 3

0

カスタム検索APIを試してみませんか?

于 2012-07-23T00:59:31.400 に答える
0

コードのテスト中に発生した 2 つのこと:

まず、正規表現が間違っています。次のような文字をエスケープする必要があります。

preg_match("/Best guess for this image:&nbsp;(.*)<\/a>/", $result, $matches);

次に、$result を印刷すると、「302: ドキュメントが移動されました」というメッセージが表示され、次へのリンクが表示されます。

http://images.google.com/search?tbs=sbi:AMhZZitt90SDPhLD9YMKK0zsGPwPtv7We9Nx0VHAncZh0XuZKPl_1Hqv8XGny1cs4jPSR-Byfk7P_1tBQp3Lu8p83b6yYDw_1g0v9ciHDp_1qZpBxV2lCsHVbk5MTlJYW4JdJqc683K4kk9D7k-AnmqI5fGS09xLBo0q57yYJVfgC1YPhn0u3gFW3loZIXQL30pJhulG7O5XdR-whIhu_1YQKWHGzrMEMP-rUrfoNWN0ndIv9_1vfckTr2hD0ziGMEG1Dc9kQ8XPZzdvDg0YmeyyxJhtaYK5Rgdbr9qBU4KG4GYkNPkcdPn1kq_1dRAhWNYob8aOsDK-596CLI5ys32TmsPL2riU6Hm7ov9rn_1r9ZpSDh5UmAMB72Sq2ERx6KsVMA25heuBeRlOUHTvmhgQXVL5uuqhoeqDNz0cFhHFwba3affnHn2A05apHXY2Wnf1KevEA-nYQ4TgFdBWw1XsY--kC3w03e6F_1TdxWIMLspObeLliPKOXlv7-iDg0NTcmrcKgtHknhTOMK6IsrGVhTMJnqNlorccmxyvlMCUNHslPTB9YXkusNlIs9_1H-CA1Tj79R8JWDU65ckTb9fOZ5zCkoQtouP-UkE5pLOEffXX7huJeMVF68s7vsLBGKc7-Jfm2jFoId9lnzmNjLv9NAm_1ifaVYx2rGiIhl9wcFjn3MerwS6BfjcBvHNxetxpey5vbX1gS0R4sUuV28hNdkYQbG54WmAYpqh5buBbSKHUMvFvKIUtrWIiY3PHqutuZzDJhriU6H8slX6yMhGm2c72BGG4KOZbRNg3E1oHWXHVSoLfG9zNybcW0Mf65aE4xFFq6g6dcckF5DBAYUp

興味深いことに、このコードを実行すると (「ここ」のリンクをカール)

preg_match('/(?<=(<A HREF="))(.*)(?=(\"\>here\<\/A\>))/', $result, $matches);

$ch = curl_init($matches[0]);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_exec($ch);
curl_close($ch);

print $result;

別の URL で同じページを取得するので、Google にはピギーバックを防ぐための何らかの保護があると推測しています。

于 2012-07-23T01:09:58.143 に答える
0

コードを実行すると、次のように表示されます。

Delimiter must not be alphanumeric or backslash

preg_matchこれであなたの行を修正してください:

preg_match("~Best guess for this image:&nbsp;(.*)</a>~", $result, $matches);

あなたのコードはこの時点では問題なく、エラーなしで実行されますが、実行すると再び次のように表示されNo guess on this imageます。これは、重大な問題が発生したためです。見てechoください。$result変数を使用している場合、常に次のようになります。

302 Moved
The document has moved here.

そして、あなたが置いたリンクに直接行くときのような結果のページではありません.

したがって、良い結果が得られることは決してありません。これは Google からの保護のようなものだと思います。

何か新しいことに挑戦します :-)

于 2012-07-23T01:06:16.670 に答える