Получение URL-адресов изображений по слову в PHP - PullRequest
1 голос
/ 11 июня 2010

Я разрабатываю программу, чье фоновое изображение будет меняться по отношению к актуальным темам твиттера. Итак, у меня есть функция, которая возвращает мне слово (сначала TT в твиттере), затем мне нужна другая функция, которая даст мне URL изображения относительно этого слова, например, поиск картинок Google или flickr.

Ты знаешь, как это сделать? или даже лучше, у вас есть скрипт php?

В итоге: есть ли функция, которая будет выполнять поиск изображений в Google или flickr и возвращать соответствующий URL-адрес изображения для слова

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

Google AJAX Search API позволяет вам искать изображения: Примеры поиска видео и изображений , хотя вы не можете использовать PHP для анализа результатов, я не уверен. Вы, конечно, могли бы проанализировать возвращенные данные, чтобы извлечь URL изображений, чтобы применить их в качестве фона. Также можно попробовать API поиска изображений Yahoo и API поиска flickr .

Документация Google AJAX содержит фрагмент кода PHP , который показывает, как выполнять поиск с использованием PHP.

Вот код, который находит результаты поиска изображений для "batman":

$word = "batman";
$manual_referer = 'http://example.com/';

// See reference for how to modify search
// http://code.google.com/apis/ajaxsearch/documentation/reference.html
$args = array(
    'v' => '1.0',
    'q' => $word,
    'as_filetype' => 'jpg',
    'imgsz' => 'medium', // image size
    'safe' => 'active', // image "safeness"
    'as_filetype' => 'jpg',
);
$url = "http://ajax.googleapis.com/ajax/services/search/images?";
foreach ($args as $key => $val) {
    $url .= $key . '=' . rawurlencode($val) . '&';
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $manual_referer);
$body = curl_exec($ch);
curl_close($ch);

$json = json_decode($body, true);
$results = $json['responseData']['results'];
foreach ($results as $result) {
    print "<img src=";
    print $result['url']; // here's your url
    print ">";
}

Вот как выглядит необработанный возвращенный json при декодировании:

Array
(
    [responseData] => Array
        (
            [results] => Array
                (
                    [0] => Array
                        (
                            [GsearchResultClass] => GimageSearch
                            [width] => 240
                            [height] => 338
                            [imageId] => k8FYqFKsdhvu3M:
                            [tbWidth] => 84
                            [tbHeight] => 119
                            [unescapedUrl] => http://lizilla.files.wordpress.com/2009/08/batman.jpg
                            [url] => http://lizilla.files.wordpress.com/2009/08/batman.jpg
                            [visibleUrl] => lizilla.wordpress.com
                            [title] => Superhero&#39;s, Animation, Comics, And Interesting Movies. « Lizilla
                            [titleNoFormatting] => Superhero&#39;s, Animation, Comics, And Interesting Movies. « Lizilla
                            [originalContextUrl] => http://lizilla.wordpress.com/2009/08/26/superheros-animation-comics-and-interesting-movies/
                            [content] => Dunanununanuna <b>BATMAN</b>!
                            [contentNoFormatting] => Dunanununanuna BATMAN!
                            [tbUrl] => http://images.google.com/images?q=tbn:k8FYqFKsdhvu3M::lizilla.files.wordpress.com/2009/08/batman.jpg
                        )

                    [1] => Array
                        (
                            [GsearchResultClass] => GimageSearch
                            [width] => 307
                            [height] => 290
                            [imageId] => faxJ90Dbo1TW1M:
                            [tbWidth] => 117
                            [tbHeight] => 111
                            [unescapedUrl] => http://www.solarnavigator.net/films_movies_actors/film_images/batman_michael_keaton_jack_nocholson_joker_marvel_comics.jpg
                            [url] => http://www.solarnavigator.net/films_movies_actors/film_images/batman_michael_keaton_jack_nocholson_joker_marvel_comics.jpg
                            [visibleUrl] => www.solarnavigator.net
                            [title] => <b>BATMAN</b> THE MOVIE
                            [titleNoFormatting] => BATMAN THE MOVIE
                            [originalContextUrl] => http://www.solarnavigator.net/films_movies_actors/batman.htm
                            [content] => <b>Batman</b> and the Joker in the
                            [contentNoFormatting] => Batman and the Joker in the
                            [tbUrl] => http://images.google.com/images?q=tbn:faxJ90Dbo1TW1M::www.solarnavigator.net/films_movies_actors/film_images/batman_michael_keaton_jack_nocholson_joker_marvel_comics.jpg
                        )

                    [2] => Array
                        (
                            [GsearchResultClass] => GimageSearch
                            [width] => 300
                            [height] => 300
                            [imageId] => nDWzhPnraNi_gM:
                            [tbWidth] => 116
                            [tbHeight] => 116
                            [unescapedUrl] => http://i192.photobucket.com/albums/z167/Great_WhiteSnark/batman_bale-1.jpg
                            [url] => http://i192.photobucket.com/albums/z167/Great_WhiteSnark/batman_bale-1.jpg
                            [visibleUrl] => www.coolchaser.com
                            [title] => <b>batman</b> MySpace graphics and comments
                            [titleNoFormatting] => batman MySpace graphics and comments
                            [originalContextUrl] => http://www.coolchaser.com/graphics/tag/batman
                            [content] => All Graphics » <b>batman</b>
                            [contentNoFormatting] => All Graphics » batman
                            [tbUrl] => http://images.google.com/images?q=tbn:nDWzhPnraNi_gM::i192.photobucket.com/albums/z167/Great_WhiteSnark/batman_bale-1.jpg
                        )

                    [3] => Array
                        (
                            [GsearchResultClass] => GimageSearch
                            [width] => 250
                            [height] => 302
                            [imageId] => W9EAV1DUDesHuM:
                            [tbWidth] => 96
                            [tbHeight] => 116
                            [unescapedUrl] => http://upload.wikimedia.org/wikipedia/en/thumb/f/f6/New_Batman_Adventures_cast.jpg/250px-New_Batman_Adventures_cast.jpg
                            [url] => http://upload.wikimedia.org/wikipedia/en/thumb/f/f6/New_Batman_Adventures_cast.jpg/250px-New_Batman_Adventures_cast.jpg
                            [visibleUrl] => en.wikipedia.org
                            [title] => The New <b>Batman</b> Adventures - Wikipedia, the free encyclopedia
                            [titleNoFormatting] => The New Batman Adventures - Wikipedia, the free encyclopedia
                            [originalContextUrl] => http://en.wikipedia.org/wiki/The_New_Batman_Adventures
                            [content] => The New <b>Batman</b> Adventures
                            [contentNoFormatting] => The New Batman Adventures
                            [tbUrl] => http://images.google.com/images?q=tbn:W9EAV1DUDesHuM::upload.wikimedia.org/wikipedia/en/thumb/f/f6/New_Batman_Adventures_cast.jpg/250px-New_Batman_Adventures_cast.jpg
                        )

                )

            [cursor] => Array
                (
                    [pages] => Array
                        (
                            [0] => Array
                                (
                                    [start] => 0
                                    [label] => 1
                                )

                            [1] => Array
                                (
                                    [start] => 4
                                    [label] => 2
                                )

                            [2] => Array
                                (
                                    [start] => 8
                                    [label] => 3
                                )

                            [3] => Array
                                (
                                    [start] => 12
                                    [label] => 4
                                )

                            [4] => Array
                                (
                                    [start] => 16
                                    [label] => 5
                                )

                            [5] => Array
                                (
                                    [start] => 20
                                    [label] => 6
                                )

                            [6] => Array
                                (
                                    [start] => 24
                                    [label] => 7
                                )

                            [7] => Array
                                (
                                    [start] => 28
                                    [label] => 8
                                )

                        )

                    [estimatedResultCount] => 3050000
                    [currentPageIndex] => 0
                    [moreResultsUrl] => http://www.google.com/images?oe=utf8&ie=utf8&source=uds&start=0&safe=active&imgsz=medium&as_filetype=jpg&hl=en&q=batman
                )

        )

    [responseDetails] => 
    [responseStatus] => 200
)

Хитрый аспект в том, что вам может потребоваться разрешение на использование этих изображений. В некоторых тестах это выглядит так, что когда вы ограничиваете общественным достоянием, вы получаете гораздо меньше изображений в результате. Кроме того, нет механизма, ограничивающего доступ к серверам, которые действительно доступны в то время, поэтому иногда вы можете получить действительный URL-адрес, но изображение не будет доступно. Это выглядит как простой запрос, но он вызывает другие проблемы в обработке URL.

1 голос
/ 11 июня 2010

Пожалуйста, прости меня за публикацию ответа, но у меня еще нет 50 репутации, поэтому я не могу оставить комментарий.

Вы не говорите, где вы получаете ваши изображения.

Если они хранятся локально, то это должно быть просто, за исключением того, что вам понадобится огромное количество изображений и вы должны признать, что вы все равно можете не найти соответствия.

Если нет, вы можете просто получить первое изображение из изображений Google. Однако будьте в курсе возможных проблем с авторским правом; Возможно, вы захотите найти сайт с лицензией на изображения под лицензией Creative Commons .

В любом случае, как сказал @zneak, если вы используете одно слово, вы часто будете получать неожиданные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...