Facebook, как по требованию мета-контент скребок - PullRequest
3 голосов
/ 03 июня 2010

вы, ребята, когда-либо видели, что FB очищает ссылку, которую вы публикуете на Facebook (статус, сообщение и т. Д.), Сразу после ее вставки в поле ссылки и показывает различные метаданные, большой палец изображения, различные изображения со страницы. ссылка или большой палец с ссылки, связанной с видео (например, YouTube).

есть идеи, как скопировать эту функцию? Я думаю о паре рабочих-механиков или, что еще лучше, просто javascript, который делает XHR-запросы и анализирует контент на основе регулярных выражений или чего-то подобного ... какие-нибудь идеи? какие ссылки? кто-то уже пытался сделать то же самое и обернул это в хороший класс? что-нибудь? :)

спасибо!

Ответы [ 3 ]

14 голосов
/ 22 октября 2010

FB извлекает метатеги из HTML.

т.е. при вводе URL-адреса FB отображает заголовок страницы, затем URL-адрес (усеченный) и затем содержимое элемента .

Что касается выбора миниатюр, я думаю, что, возможно, FB выбирает только те, которые превышают определенные размеры, то есть, пропуская графику кнопок, 1px проставки и т. Д.

Редактировать: Я не знаю точно, что вы ищете, но в PHP есть функция для сбора соответствующих данных со страниц.
При этом используется простая библиотека HTML DOM из http://simplehtmldom.sourceforge.net/

Я посмотрел, как это делает FB, и похоже, что очистка выполняется на стороне сервера.


    class ScrapedInfo
    {
        public $url;
        public $title;
        public $description;
        public $imageUrls;
    }

    function scrapeUrl($url)
    {
        $info = new ScrapedInfo();
        $info->url = $url;
        $html = file_get_html($info->url);

        //Grab the page title
        $info->title = trim($html->find('title', 0)->plaintext);

        //Grab the page description
        foreach($html->find('meta') as $meta)
                if ($meta->name == "description")
                        $info->description = trim($meta->content);

        //Grab the image URLs
        $imgArr = array();
        foreach($html->find('img') as $element)
        {
                $rawUrl = $element->src;

                //Turn any relative Urls into absolutes
                if (substr($rawUrl,0,4)!="http")
                        $imgArr[] = $url.$rawUrl;
                else
                        $imgArr[] = $rawUrl;
        }
        $info->imageUrls = $imgArr;

        return $info;
    }

0 голосов
/ 07 апреля 2012

Поскольку я занимаюсь разработкой такого проекта, это не так просто, как кажется, проблемы с кодированием, рендеринг контента с использованием JavaScript, существование такого количества несемантических веб-сайтов - одна из больших проблем, с которыми я столкнулся. Особенно извлекать информацию о видео и пытаться настроить поведение при автоматическом воспроизведении всегда сложно, а иногда и невозможно. Вы можете увидеть демонстрацию в http://www.embedify.me, она написана на .net, но имеет интерфейс службы, поэтому вы можете вызывать ее через javascript, также есть javascript api для получения того же интерфейса / поведения, что и в fb.

0 голосов
/ 20 октября 2010

Facebook просматривает различную метаинформацию в HTML страницы, которую вы вставляете в поле ссылки. title и description - два очевидных, но разработчик также может использовать <link rel="image_src" href="thumbnail.jpg" /> для предоставления предпочтительного снимка экрана. Я думаю, вы могли бы проверить эти вещи. Если этот тег отсутствует, вы всегда можете воспользоваться услугой создания миниатюр веб-сайтов .

...