Как имитировать функциональность Facebook "link link", используя node.js и javascript - PullRequest
1 голос
/ 14 апреля 2011

так что я хочу имитировать, это функция обмена ссылками, которую предоставляет Facebook.Вы просто вводите URL, а затем FB автоматически получает изображение, заголовок и краткое описание с целевого веб-сайта.Как можно запрограммировать это в javascript с помощью node.js и других библиотек javascript, которые могут потребоваться?Я нашел пример использования функции fopen в PHP, но я бы не хотел включать PHP в этот проект.

Является ли то, что я спрашиваю, примером webscraping?Все, что мне нужно сделать, это извлечь данные из мета-тегов целевого веб-сайта, а затем также получить теги изображений с помощью селекторов CSS?

Если кто-то может указать мне правильное направление, это было бы очень признательно.Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Посмотрите на ЭТОТ пост.Здесь обсуждается соскоб с node.js. ЗДЕСЬ у вас есть много предыдущей информации о соскобах с javascript и jquery.

Тем не менее, Facebook на самом деле не догадывается, что такое заголовок, описание и предварительный просмотр, они (по крайней мере, большинствовремя) получить эту информацию из мета-тегов, присутствующих на сайтах, которые хотят быть более доступными для пользователей fb.

Возможно, вы могли бы использовать эти существующие метаданные для извлечения заголовков, описаний и предварительного просмотра img.Документы по доступным метаданным: ЗДЕСЬ .

1 голос
/ 14 апреля 2011

Да, требуется очистка веб-страниц, и это самая простая часть.Сложной частью является общий алгоритм поиска заголовков и соответствующих текстов и изображений.

Как очистить

Вы можете использовать jsdom, чтобы загрузить и создать структуру DOM на вашем сервере и очистить ее с помощью jquery.на вашем сервере.Вы можете найти хороший учебник по адресу blog.nodejitsu.com / jsdom-jquery-in-5-lines-on-nodejs , как предложено @generalhenry выше.

Что почистить

Полагаю, хорошим способом найти заголовок будет: -

var h;
for(var i=6; i<=1; i++)
 if(h = $('h'+i).first()){
  break;
 }

Теперь у h будет заголовок или undefined в случае неудачи.Альтернативой для этого может быть просто получить тег title на странице.:)

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

И при получении удаленных данных убедитесь, что флаг ProcessExternalResources выключен,Это гарантирует, что теги сценариев для рекламы не будут загрязнять извлеченную страницу.

И да, соответствующий текст будет в некоторых тегах после h.

...