Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Парсер IMDB

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Viper
Отправлено: 22 Марта, 2010 - 07:52:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Собственно понадобился парсер инфы о фильме с этого сайта.
После недолгих поисков нашел готовый класс, но пришлось дописать, т.к. некоторые данные находятся на другой странице.
Итог. Функция для получения id фильма и информации. Результат работы вывод списка фильмов найденых по переданному имени фильма. Далее возврат результатов парсинга в виде json.

PHP:
скопировать код в буфер обмена
  1. function getFromIMDB($tt=1) { // если $tt = 0 тогда делаем поиск, иначе парсим по id
  2.         global $database, $mosConfig_absolute_path, $ka_proxy_ip, $ka_proxy_port, $ka_proxy_user, $ka_proxy_pass, $ka_imdb_user, $ka_imdb_pass;
  3.  
  4.         $movie_name = urlencode(mosGetParam($_REQUEST, 'movie_name', ''));
  5.         $movie_id = intval(mosGetParam($_REQUEST, 'movie_id', null));
  6.  
  7.         require_once($mosConfig_absolute_path.'/administrator/components/com_kinoarhiv/classes/class.snoopy.php');
  8.         require_once($mosConfig_absolute_path.'/administrator/components/com_kinoarhiv/classes/class.parser.imdb.php');
  9.  
  10.         $search_url = 'http://www.imdb.com/find?s=tt;q=';
  11.         $movie_url = 'http://imdb.com/title/tt';
  12.  
  13.         $snoopy = new Snoopy;
  14.         $snoopy->proxy_host = $ka_proxy_ip;
  15.         $snoopy->proxy_port = $ka_proxy_port;
  16.         $snoopy->proxy_user = $ka_proxy_user;
  17.         $snoopy->proxy_pass = $ka_proxy_pass;
  18.         $snoopy->user = $ka_imdb_user;
  19.         $snoopy->pass = $ka_imdb_pass;
  20.         $snoopy->agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
  21.         $snoopy->rawheaders['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0';
  22.         $snoopy->rawheaders['Pragma'] = 'no-cache';
  23.         $snoopy->rawheaders['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
  24.         $snoopy->rawheaders['Accept-Language'] = 'ru,en-us;q=0.7,en;q=0.3';
  25.  
  26.         $imdb = new IMDB_Parser;
  27.  
  28.         if ($tt == 1 && $movie_name != '') {
  29.                 if ($snoopy->fetch($search_url.$movie_name)) {
  30.                         $raw_search_page = $snoopy->results;
  31.                         echo '<div align="left">';
  32.  
  33.                         // Get "Popular Titles"
  34.                         preg_match('@<p><b>Popular Titles</b>(.*?)</p>@', $raw_search_page, $pt);
  35.                         if ($pt !== '') {
  36.                                 $strip_pt = preg_replace('@ onClick="(.*?)"@i', '', $pt[0]);
  37.                                 $strip_pt = preg_replace('@<img[^>]*>@i', '', $strip_pt);
  38.                                 $strip_pt = str_replace('<br>', '', $strip_pt);
  39.                                 echo preg_replace('@<a href="/title/tt(.*?)/">@', '<a id="link_to_movie" href="javascript:void(0);" onClick="getIMDB(\'\\1\');">', $strip_pt);
  40.                         }
  41.  
  42.                         // Get "Exact Matches"
  43.                         preg_match('@<p><b>Titles \(Exact Matches\)</b>(.*?)</p>@', $raw_search_page, $em);
  44.                         if ($em !== '') {
  45.                                 $strip_em = preg_replace('@ onClick="(.*?)"@i', '', $em[0]);
  46.                                 $strip_em = preg_replace('@<img[^>]*>@i', '', $strip_em);
  47.                                 $strip_em = str_replace('<br>', '', $strip_em);
  48.                                 echo preg_replace('@<a href="/title/tt(.*?)/">@', '<a id="link_to_movie" href="javascript:void(0);" onClick="getIMDB(\'\\1\');">', $strip_em);
  49.                         }
  50.  
  51.                         // Get "Partial Matches"
  52.                         preg_match('@<p><b>Titles \(Partial Matches\)</b>(.*?)</p>@', $raw_search_page, $pm);
  53.                         if ($pm !== '') {
  54.                                 $strip_pm = preg_replace('@ onClick="(.*?)"@i', '', $pm[0]);
  55.                                 $strip_pm = preg_replace('@<img[^>]*>@i', '', $strip_pm);
  56.                                 $strip_pm = str_replace('<br>', '', $strip_pm);
  57.                                 echo preg_replace('@<a href="/title/tt(.*?)/">@', '<a id="link_to_movie" href="javascript:void(0);" onClick="getIMDB(\'\\1\');">', $strip_pm);
  58.                         }
  59.  
  60.                         echo '</div>';
  61.                 } else {
  62.                         echo 'error fetching document: '.$snoopy->error;
  63.                 }
  64.         } else {
  65.                 header('Content-type: application/json');
  66.                 if ($snoopy->fetch($movie_url.$movie_id)) {
  67.                         $movie_name = $database->getEscaped($imdb->getMovieTitle($snoopy->results, true));
  68.                         $year = intval($imdb->getMovieYear($snoopy->results));
  69.                         $genres_arr = array_unique($imdb->getMovieGenres($snoopy->results));
  70.                         $genres = implode('|', $genres_arr);
  71.                         $cns_arr = array_unique($imdb->getMovieCountry($snoopy->results));
  72.                         $cns = implode('|', $cns_arr);
  73.                         $tagline = $imdb->getMovieTagline($snoopy->results);
  74.                         $time = $imdb->getMovieRuntime($snoopy->results);
  75.                         $directed_by = $imdb->getMovieDirectedBy($snoopy->results);
  76.                         $rate = $imdb->getMovieStars($snoopy->results);
  77.                         if ($snoopy->fetch($movie_url.$movie_id.'/fullcredits')) {
  78.                                 $scenario = $imdb->getMovieScenarists($snoopy->results);
  79.                                 $actors = $imdb->getMovieCast($snoopy->results);
  80.                                 $producers = $imdb->getMovieProducedBy($snoopy->results);
  81.                                 $music_by = $imdb->getMovieMusicBy($snoopy->results);
  82.                                 $operators = $imdb->getMovieOperator($snoopy->results);
  83.                         }
  84.  
  85.                         $result = '{"movie_name":"'.$movie_name.'"},{"year":"'.$year.'"},{"genres":"'.$genres.'"},{"countries":"'.$cns.'"},{"slogan":"'.$tagline.'"},{"time":"'.$time.'"},{"dir_by":"'.$directed_by.'"},{"rate":"'.$rate.'"},{"imdb_id":"'.$movie_id.'"},{"scenarists":"'.$scenario.'"},{"actors":"'.$actors.'"},{"prod_by":"'.$producers.'"},{"music_by":"'.$music_by.'"},{"operators":"'.$operators.'"}';
  86.                         echo $result;
  87.                 } else {
  88.                         echo '{"error":"Error fetching document - '.$snoopy->error.'"}';
  89.                 }
  90.         }
  91. }


функция JS для парсинга
CODE (javascript):
скопировать код в буфер обмена
  1. function getIMDB(id) {
  2.         jQuery(document).ready(function($){
  3.                 $.nyroModalManual({
  4.                         content: "Please waiting...<br />Transfering data..."
  5.                 });
  6.                 $.ajax({
  7.                         beforeSend: function(xhr){
  8.                                 if (xhr.overrideMimeType) {
  9.                                         xhr.overrideMimeType("application/json");
  10.                                 }
  11.                         },
  12.                         type: "POST",
  13.                         url: "index3.php",
  14.                         data: "option=com_kinoarhiv&task=getFromIMDB&tt=0&movie_id="+id+"&no_html=1",
  15.                         dataType: "json",
  16.                         cache: false,
  17.                         success: function(data){
  18.                                 // выполняем на массивом данных нужные действия
  19.                         },
  20.                         error: function(xhr){
  21.                                 alert("Something went wrong: "+xhr.responseText);
  22.                         }
  23.                 });
  24.         });
  25. }


класс в вложении.
класс snoopy здесь http://sourceforge[dot]net/projects/snoopy/
Jquery - http://jquery[dot]com
$.nyroModal можно заменить любым другим плагином, поддерживающим загрузку html в "себя".
Скачать файл: class.parser.imdb.php
Скачан раз: 435

(Отредактировано автором: 22 Марта, 2010 - 07:54:38)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB