X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Парсер YouTube.com, Нужна помощь в допиливании
Fucktor
Fucktor
Topic Starter сообщение 28.1.2013, 17:59; Ответить: Fucktor
Сообщение #1


Здравствуйте. Решил доработать скрипт парсера YouTube, который валяется в инете. Он мне не был удобен тем, что записывал во первых целые ссылки и записывал их в файл. Я сделал чтобы только код видео записывался в определённую ячейку MySQL, но мне нужно спарсить ещё и Заголовки, а также желательно и описания к видео в ячейки базы. Пока что имеется вот что:

CREATE TABLE IF NOT EXISTS `youtube` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `url` varchar(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;


Сам скрипт:

<?php

// Отключить все сообщения об ошибках
/*error_reporting(0);*/

// Инклудим все необходимое

@ini_set('max_execution_time', 0);

// Подключаемся к серверу MySQL
$hostname = 'localhost';
$username = 'root';
$password = 'password';

$db = mysql_connect($hostname, $username, $password) or die('Ошибка соединения базы');

// Устанавливаем нужную кодировку
mysql_set_charset('utf8');

// Выбираем нужную БД
mysql_select_db('mysql_db') or die('db not found');
?>
<html>

<head>
<style>
input:focus{
  outline:none;
  border-color:rgba(255,25,33,.75);
  border-radius:3px;
  -moz-border-radius:3px;
  -webkit-border-radius:3px;
  box-shadow:0 0 8px rgba(255,25,33,.5);
  -moz-box-shadow:0 0 8px rgba(255,25,33,.5);
  -webkit-box-shadow:0 0 8px rgba(255,25,33,.5);
}
input{
  border:1px solid #aaa;
  border-radius:3px;
  -moz-border-radius:3px;
  -webkit-border-radius:3px;
  transition:border linear .2s,box-shadow linear .2s;
  -moz-transition:border linear .2s,-moz-box-shadow linear .2s;
  -webkit-transition:border linear .2s,-webkit-box-shadow linear .2s;
}

textarea:focus{
  outline:none;
  border-color:rgba(255,25,33,.75);
  border-radius:3px;
  -moz-border-radius:3px;
  -webkit-border-radius:3px;
  box-shadow:0 0 8px rgba(255,25,33,.5);
  -moz-box-shadow:0 0 8px rgba(255,25,33,.5);
  -webkit-box-shadow:0 0 8px rgba(255,25,33,.5);
}
textarea{
  border:1px solid #aaa;
  border-radius:3px;
  -moz-border-radius:3px;
  -webkit-border-radius:3px;
  transition:border linear .2s,box-shadow linear .2s;
  -moz-transition:border linear .2s,-moz-box-shadow linear .2s;
  -webkit-transition:border linear .2s,-webkit-box-shadow linear .2s;
}

table{
background-color: #cccccc;
width: 400px;
}
tr{
background-color: #ffffff;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>YouTybe Парсер </title>
</head>
<body>

<form  action="" method="post">
<input name="url" type="hidden" value="<?=$url?>">
<center>

<table>
<tr><td><div style='padding:5px;' align="right">Кейворды:</div></td><td> <div style='padding:5px;' align="left"><textarea name="keys" rows=5 cols=20 wrap="off"></textarea></div></td></tr>
<tr><td><div style='padding:5px;' align="right">Количество страниц:</div></td><td> <div style='padding:5px;' align="left"><input name="page" type="text" value="1"> </div></td></tr>
</table>
<table>
<tr><td><center><input name="sub" type="submit" value="Парсить">    <input  type="reset" value="Сбросить настройки"></center> </td></tr>
</table>
</center>
</form>

<?php
    if(isset($_POST['sub'])){

    $keys = $_POST['keys'];
    $page = intval(trim($_POST['page']));
    $url = trim($_POST['url']);

    $KeysArray = explode("\n",$keys);
    $KeysArray = array_map("trim",$KeysArray);
    $CountKeys = count($KeysArray);

    // счетчик
    $cpl = 0;

    ///Условие
    if ($CountKeys>0 && !empty($page)){

           for ($i=0;$i<$CountKeys;$i++){

            // количество страниц
               for ($p=1;$p<=$page;$p++){

                $YouLink = "";

                //обрабатываем ключевик
                $key = trim($KeysArray[$i]);
                $key = rawurlencode($key);
                $key = str_replace("%20", "+", $key);

                $PageParse=file_get_contents("http://www.youtube.com/results?search_category=10&search_query=".$key."&high_definition=1&search_type=videos&uni=3&search_sort=video_view_count&page=".$p);
                
                  if(strpos($PageParse, "/watch?v=")!=FALSE)
                    {
                    preg_match_all('~<a.+title="([^"]+)".+/watch\?v=([^"]+)~sU', $PageParse, $matches);
                    $resultmovies=implode(" ", $matches[1]);
                    
                    $resultmovies=str_replace("&high_definition=1", null, $resultmovies);
                    $resultmovies=str_replace("&feature=browch", null, $resultmovies);
                    $resultmovies=explode(" ", $resultmovies);
                    $resultmovies=array_unique($resultmovies);
                    $moviescount=count($resultmovies);
                    
                        echo '<ul>';
                        foreach($resultmovies as $movielink)
                        {
                            $YouLink.= trim($movielink);
                            $cpl++;
                            
                            $query = "INSERT INTO `youtube` VALUES (NULL,'".$title."','".$description."','".trim($movielink)."')";
                            $result = mysql_query($query) or die('query failed');
                        }
                            
                            print_r($YouLink);
                            
                        echo '</ul>';
                    }
                 }
           }
      }
     echo "<center><table><tr><td><font color=\"green\">Спарсено $cpl видео c youtube.com</font></td></tr></table></center>";
    }
?>
<?
mysql_close($db);
?>
</body>
</html>


Помогите пожалуйста дописать скрипт, чтобы парсил и Заголовки, не в ладах я пока с регулярными выражениями

Пример работы http://www.modxrevo.ru/youparser.php

Подсказали что теперь нужно исправить индексы которые получаются в $matches.

Может подскажет кто, что за индексы и как их поправить?
[/code]

Сообщение отредактировал lostprophet - 29.1.2013, 11:38
Причина редактирования: По просьбе ТС
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
tszyan
tszyan
сообщение 29.1.2013, 11:34; Ответить: tszyan
Сообщение #2


Fucktor,

Под исправлением индексов подразумевалось что строчка:
preg_match_all("/href=\"\/watch\?v=([^\"]*)\"/sU", $PageParse, $matches);

возвращает в переменную $matches массив с результатами соответствующими регулярному выражению, а поменяв регулярное выражение так, чтобы в эту переменную возвращался также и title, вы меняете количество элементов в возвращаемом массиве.

В этой строчке идет обращение к элементу массива с индексом 1:
$resultmovies=implode(" ", $matches[1]);

После внесения изменений в этом элементе будет уже не идентификатор, а title (предполагаю, сам не тестировал).
Чтобы проверить что в каком элементе - можно вывести $matches с помощью print_r.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Fucktor
Fucktor
Topic Starter сообщение 29.1.2013, 16:26; Ответить: Fucktor
Сообщение #3


tszyan, выводил уже, вот что у меня вышло:

<?php

// Отключить все сообщения об ошибках
/*error_reporting(0);*/

// Инклудим все необходимое

@ini_set('max_execution_time', 0);

// Подключаемся к серверу MySQL
$hostname = 'localhost';
$username = 'root';
$password = 'password';

$db = mysql_connect($hostname, $username, $password) or die('Ошибка соединения базы');

// Устанавливаем нужную кодировку
mysql_set_charset('utf8');

// Выбираем нужную БД
mysql_select_db('db_mysql') or die('db not found');
?>
<html>

<head>
<style>
input:focus{
  outline:none;
  border-color:rgba(255,25,33,.75);
  border-radius:3px;
  -moz-border-radius:3px;
  -webkit-border-radius:3px;
  box-shadow:0 0 8px rgba(255,25,33,.5);
  -moz-box-shadow:0 0 8px rgba(255,25,33,.5);
  -webkit-box-shadow:0 0 8px rgba(255,25,33,.5);
}
input{
  border:1px solid #aaa;
  border-radius:3px;
  -moz-border-radius:3px;
  -webkit-border-radius:3px;
  transition:border linear .2s,box-shadow linear .2s;
  -moz-transition:border linear .2s,-moz-box-shadow linear .2s;
  -webkit-transition:border linear .2s,-webkit-box-shadow linear .2s;
}

textarea:focus{
  outline:none;
  border-color:rgba(255,25,33,.75);
  border-radius:3px;
  -moz-border-radius:3px;
  -webkit-border-radius:3px;
  box-shadow:0 0 8px rgba(255,25,33,.5);
  -moz-box-shadow:0 0 8px rgba(255,25,33,.5);
  -webkit-box-shadow:0 0 8px rgba(255,25,33,.5);
}
textarea{
  border:1px solid #aaa;
  border-radius:3px;
  -moz-border-radius:3px;
  -webkit-border-radius:3px;
  transition:border linear .2s,box-shadow linear .2s;
  -moz-transition:border linear .2s,-moz-box-shadow linear .2s;
  -webkit-transition:border linear .2s,-webkit-box-shadow linear .2s;
}

table{
background-color: #cccccc;
width: 400px;
}
tr{
background-color: #ffffff;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>YouTybe Парсер </title>
</head>
<body>

<form  action="" method="post">
<input name="url" type="hidden" value="<?=$url?>">
<center>

<table>
<tr><td><div style='padding:5px;' align="right">Кейворды:</div></td><td> <div style='padding:5px;' align="left"><textarea name="keys" rows=5 cols=20 wrap="off"></textarea></div></td></tr>
<tr><td><div style='padding:5px;' align="right">Количество страниц:</div></td><td> <div style='padding:5px;' align="left"><input name="page" type="text" value="1"> </div></td></tr>
</table>
<table>
<tr><td><center><input name="sub" type="submit" value="Парсить"> &nbsp;&nbsp;&nbsp;<input  type="reset" value="Сбросить настройки"></center> </td></tr>
</table>
</center>
</form>

<?php
    if(isset($_POST['sub'])){

    $keys = $_POST['keys'];
    $page = intval(trim($_POST['page']));
    $url = trim($_POST['url']);

    $KeysArray = explode("\n",$keys);
    $KeysArray = array_map("trim",$KeysArray);
    $CountKeys = count($KeysArray);

    // счетчик
    $cpl = 0;

    ///Условие
    if ($CountKeys>0 && !empty($page)){

           for ($i=0;$i<$CountKeys;$i++){

            // количество страниц
               for ($p=1;$p<=$page;$p++){

                $YouLink = "";

                //обрабатываем ключевик
                $key = trim($KeysArray[$i]);
                $key = rawurlencode($key);
                $key = str_replace("%20", "+", $key);

                $PageParse=file_get_contents("http://www.youtube.com/results?search_category=10&search_query=".$key."&high_definition=1&search_type=videos&uni=3&search_sort=video_view_count&page=".$p);
                
                  if(strpos($PageParse, "/watch?v=")!=FALSE)
                    {
                    preg_match_all('~<a.+title="([^"]+)".+/watch\?v=([^"]+)~sU', $PageParse, $matches);
                    $resultmovies=implode(" ", $matches[2]);
                    
                    
                    $resultmovies=str_replace("&high_definition=1", null, $resultmovies);
                    $resultmovies=str_replace("&feature=browch", null, $resultmovies);
                    $resultmovies=explode(" ", $resultmovies);
                    $resultmovies=array_unique($resultmovies);
                    $moviescount=count($resultmovies);
                    
                        echo '<ul>';
                        
                        foreach($matches[1] as $key => $val)
                        {
                            $title = $val;
                            $url =  $matches[2][$key];
                            $cpl++;
                            
                            $query = "INSERT INTO `youtube` VALUES (NULL,'".$title."','".$description."','".$url."')";
                            $result = mysql_query($query) or die('query failed');
                        }
                        echo '</ul>';
                    }
                 }
           }
      }
     echo "<center><table><tr><td><font color=\"green\">Спарсено $cpl видео c youtube.com</font></td></tr></table></center>";
    }
?>
<?
mysql_close($db);
?>
</body>
</html>


Но тут появилась другая проблема, в ячейку url в базу записывается по одному символу на строку, в title записываются заголовки. Вот теперь не пойму почему же ссылки не хавает.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
tszyan
tszyan
сообщение 30.1.2013, 15:18; Ответить: tszyan
Сообщение #4


Регулярное выражение кривое.
Попробуй:
preg_match_all('~<a [^<>]*title=[\'"]([^\'"]+)[\'"] [^<>]*href=[\'"]/watch\?v=([^\'"]+)[\'"][^<>]*>~si', $PageParse, $matches);
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
xdparlament
xdparlament
сообщение 30.1.2013, 23:07; Ответить: xdparlament
Сообщение #5


подскажите пожалуйста как с помощью этого скрипта можно исключить некоторые видео,чтобы они не попадали в файл, либо определенный канал
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
tszyan
tszyan
сообщение 30.1.2013, 23:47; Ответить: tszyan
Сообщение #6


xdparlament,
Поставьте задачу корректнее.
Чего вы хотите добиться? О каком файле речь?

Данный скрипт парсит результаты поиска и сохраняет названия и идентификаторы видео в базу данных.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
xdparlament
xdparlament
сообщение 31.1.2013, 12:57; Ответить: xdparlament
Сообщение #7


tszyan, об этом же файле и речь, можно ли дописать исключения, которые бы этот скрипт просто не добавлял в базу ?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Fucktor
Fucktor
Topic Starter сообщение 31.1.2013, 13:56; Ответить: Fucktor
Сообщение #8


tszyan, огромное спасибо, всё заработало smile.gif

Теперь в задачах сделать фильтр по поиску с выводом и сохранением значений для парсинга + исключение дублей, ну и думаю ещё нужно будет ещё и полные описания научиться грабить)))

Ну а сам вывод этих видосов сделать будет не трудно)))

Сообщение отредактировал Fucktor - 31.1.2013, 13:56
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
tszyan
tszyan
сообщение 31.1.2013, 23:28; Ответить: tszyan
Сообщение #9


xdparlament,
В данном случае регулярное выражение находит значения title и url, если их достаточно для вашего условия, то смело вставляете его перед добавлением в базу. Если не хватает (Вы упоминали исключение определенного канала), то надо либо менять выражение, либо добавлять новое (смотря что будет удобнее в конкретном случае), чтобы оно возвращало те данные, которые вам нужны для условия.

Скрипт не применим - если данных в HTML коде страницы просто не достаточно. Например, если нужно исключить каналы в которых меньше 10 видео. В этом случае придется парсить в глубину и загружать еще одну страницу для каждого видео (или канала, если хранить информацию о них в БД).

Больше по данному вопросу без конкретного условия ничего сказать не могу.

Fucktor,
Пожалуйста.
Дубляжи лучше проверять при добавлении в базу (видел у вас проверку на уникальность и другие магические действия с непонятной переменной $resultmovies, которая в последней версии вообще не используется).
Для получения полного описания придется парсить внутренние страницы (в 21 раз больше HTML-файлов грузить, со всеми вытекающими для трафика и быстродействия).

Сообщение отредактировал tszyan - 31.1.2013, 23:30
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Fucktor
Fucktor
Topic Starter сообщение 1.2.2013, 12:24; Ответить: Fucktor
Сообщение #10


tszyan, надо пробовать) на счёт описаний лучше наверное свой какой-то текст генерить и с ключами самого видео вставлять. Чтобы был какой-то маломальский текст. Вот кстати попробовал попарсить по ключам, дублей куча, как все их безболезнено удалить все сразу, а не по одному через phpmyadmin не знаю sad.gif

http://www.rapcorp.net/multimedia/video/
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыA-Parser 1.1 - продвинутый парсер ПС, кейвордов, контента, показателей, 70+ парсеров.
352 Forbidden 278193 21.3.2024, 14:38
автор: AParser_Support
Открытая тема (нет новых ответов) Не получается оплатить YouTube Premium (для Турции и Аргентины по VPN YouTube Premium недоступна)
3 rownong27 443 20.3.2024, 21:39
автор: MisterBit
Открытая тема (нет новых ответов) Базы Youtube кейвордов с данными по конкуренции и Volume
3 Krok 1033 20.3.2024, 14:59
автор: ManagerAE8888
Горячая тема (нет новых ответов) TopSmm.ru Накрутка Вконтакте/Instagram/YouTube и др. Гарантия на докрутку и самые низкие цены!
74 KalininDima 38589 15.3.2024, 16:12
автор: KalininDima
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыДешевые просмотры YouTube с гарантией, услуги в Instagram, ВК, FB, ОK, Twitter - SmmPanele.Ru
Очень качественные услуги, сотни отзывов на других форумах. Делаю все
146 SergWeider 99373 23.2.2024, 17:36
автор: SergWeider


 



RSS Текстовая версия Сейчас: 28.3.2024, 14:19
Дизайн