Название: Парсер с opensharing.org
Движки: Tesla Gold, Tesla Platinum
1) Парсит описание, все bb коды правильной конвертации.
2) Постер заливает на сервер и вводится в соответственные поле.
3) Теги фильтруются и заносятся в поле 'tags'.
4) Категория автоматически определяется.
5)Скриншоты вводит в соответственные поле, фильтруются, скриншот должен быть не меньше: шириной - 300, высотой - 150.
6) Превью скриншотов определяется, само заходит на сайт и копирует большое изображения, а на некоторых замену делает.
7) У парсера есть 2 способы парсить:
а) Указываем id раздачи который хотим спарсить
б) Автоматом парсем все роздачи что есть в базе данных(бд).
8) Можно выбирать какую категорию парсить.
9) .torrent файл копируется в папку с торентами.
10) Проверка по Хэш, если есть данный Хэш в бд то не заливает релиз на трекер.
11) Если нету описания к релизу, то тогда не заливает релиз на трекер.
12) Процедура парсинга поэтапно расписана (что спарсино, что нет).
13) В конце небольшая статистика. Сколько спарсино раздач, сколько осталось и сколько всего было + в процентах отображения сколько спарсино релизов.
14) Время генерации 6 - 8 секунд.
15) Весь код продокументирован, легко читается.
Установка:
1) Запрос в базу:
CREATE TABLE `grab_open` ( `id` int(10) unsigned NOT NULL auto_increment, `details` int(100) NOT NULL default '0', `work` int(10) unsigned default '1', PRIMARY KEY (`id`), UNIQUE KEY `one` (`details`) ) ENGINE=Aria DEFAULT CHARSET=cp1251 AUTO_INCREMENT=17474 ;
Создать файл parser_open.php и закинуть в корень трекера:
<?
/**
* Автор : 6atafan aka VictoRD11
* icq : 436788492
* Z249740074765
* R210907110797
* U253667061157
* Поддержы автора!
**/require_once("include/bittorrent.php");
require_once("include/benc.php");
dbconn();// Показывать ошибок на экран, On or Off
@ini_set('display_errors', 'On');
// Лимит отработки скрипта
@ini_set('memory_limit', '32M');// Проверка на авторизацию
loggedinorreturn();// Проверка на класс пользователя
if ($CURUSER["class"] <> 6)
{
die;
}// Выводим title
echo '<title>Парсер торрентов с opensharing.org</title>';$action = (string)$_GET['action'];
if($action == 'link')
{
$idpage = (int)$_GET["page"];
$cat = (int)$_GET['cat'];
// Проверку на категорию
if(!empty($cat))
{
// Подгружаем страницу
$this_content = file_get_contents('http://opensharing.org/b.php?cat='.$cat.'&page='.$idpage);
// Все id торентов парсим
preg_match_all('/<a class="downgif" href="\/download\/(.*?)\/">/is', $this_content, $id_torrent);
// Проверка на ссылки
if(count($id_torrent[1]))
{
echo '<b><font color=green>Найдены id.</font></b>';
$numminus = $numplus = 0;
// Цикл
foreach ($id_torrent[1] as $torrent)
{
// Все найденые id заносим в бд
sql_query("INSERT INTO grab_open (details, work) VALUES (".sqlesc($torrent).",".sqlesc("1").")");
// Проверка добавило роздачу или нет.
$newid = mysql_insert_id();
//Подсчет сколько силок спарсино, сколько нет.
if($newid)
{
++$numplus;
} else {
++$numminus;
}
}
// Вывод на экран информацию
echo '</br>Спарсировано <b><font color=green>'.$numplus.'</font></b> из <b><font color=red>'.$numminus.'</font></b> сылок';
} else {
echo '</br>Не могу спарсировать ссылки - <b><font color=red>Ошибка</font></b>';
}
++$idpage;
// Редирект
echo '<script>setTimeout(\'document.location.href="parser_open.php?action=link&cat='.$cat.'&page='.$idpage.'"\', 1000);</script>';
die;
} else {
// Выбираем какую категорию парсить
echo '<form method="get">';
echo '<b><font color=green>Парсем категорию</font></b> : ';
echo '<input type="hidden" name="action" value="link">';
echo '<select name="cat">';
echo '<option value="10" selected="">Все</option>';
echo '<option value="1">Кино</option>';
echo '<option value="2">Музыка</option>';
echo '<option value="3">Разное</option>';
echo '<option value="4">Сериалы</option>';
echo '<option value="5">Книги</option>';
echo '<option value="6">Телевизор</option>';
echo '<option value="7">Мультипликация</option>';
echo '<option value="8">Игры</option>';
echo '<option value="9">Софт</option>';
echo '</select>';
echo ' <input type="submit" style="width: 100px" value="Поехали" />';
echo '</form>';
die;
}
}
// Выбираем из базы данных не спарсированые роздачи
$query = sql_query("SELECT * FROM grab_open WHERE work='1' ORDER BY id DESC LIMIT 1");
$result = mysql_fetch_array($query);// id ссылки на opensharing.org
$releases_id = $result["details"];
$id_grab = $result["id"];// Проверка на парсер роздачи по id
if (!empty($_GET["id"]))
{
$releases_id = (int)$_GET['id'];
}// Если нету релизов для парсинга, редирект на ссылки
if (empty($releases_id))
{
echo 'Сборка силок <script>setTimeout(\'document.location.href="parser_open.php?action=link"\', 5000);</script>';
die;
} else {
echo 'Взят id с базы: <font color=green><b>'.$releases_id.'</b></font>';
}// Автори,групы роздач
$reliz = array("от Suprug (BigFANGroup)", "от OpenSharing", "от HQ-ViDEO", "от HELLYWOOD", "от CGInfo", "от Бультерьер", "от HD-Te@m", "от PlanetaUA", "от LostFilm", "от NovaFiLM", "от Friends-Club", "от Bumblebee", "от INTERFILM", "от 25KADR", "от Vvv", "от HQCLUB", "от UaTeam", "от ExKinoRay", "от AnimeReactor", "от BigFANGroup", "от FreeTorrents-UA", "от FS-Media", "от Dizell", "от Lukavaya", "от NOLIMITS-TEAM", "от КинозалSAT", "от Hurtom", "от AndrewWhite", "от Neofilm", "от HQRips", "от MassTorr", "от NovaLan", "от BestSound ExKinoRay", "от Кинозал", "от ParadiSe", "от Lossless", "от ParadiSe Кинозал", "от Vaippp", "от GREEN TEA", "от KinoZalSat", "от VinylRip", "от Files-x", "от Xixidok", "от Japan mini-lp Remasters", "от olegek70", "от AniFilm", "от Torrent-Games", "от ivandubskoj", "от Traumer | Reloading", "от Freeisland", "от den904", "от R.G. GoldenShara | Extended", "от R.G. GoldenShara", "от SergV", "от Theatrical Cut", "от Director's Cut", "от Sergei7721", "от Релиз ®", "от Widok", "от KimVlad & ANDROZZZ", "от KINOREAKTOR", "от gegemaunt & Psycho-Share", "от 100 ТВ", "от ®", "от R.G.Packers", "от Snowrecords", "от R.G.Игроманы", "от egoleshik", "от R.G. RuTor", "от VIDEODB", "от BestSound", "от (AVO @PD)", "от Лье Ло", "от Riper AM", "от Smart's Studios & Onefilm", "от Smart's Studios", "от Onefilm", "от RipOnline", "от X-DIGITAL", "от Рипер ОК!", "от bvsbns", "от РиперАМ", "от ed_rez", "от Rip Spieler", "от Enigma-Vladislav71", "от R.G. Repacker's", "от & Ivnet-Cinema", "от R.G. Catalyst", "от R.G. Механики", "от R.G. Origami", "от RiperAM", "от КinoZalSat", "от DHT-Movies", "от Релиз", "от GENADIY", "от (VO-production)", "от КиноРай.ТВ", "от Хтабыч", "от Kosmos", "от Sheikn", "от BigFANGrop", "от AntiBobr", "от SatTV", "от СТС", "от R.G. Element Arts", "от xatab", "от Firebit-Films", "от q1q1", "от Кубик в Кубе", "от PROPER", "от DreamRecords", "от Theatrical Cut PROPER", "от SMALL-RiP", "от Firebit-Ретро", "от SHIZA [NIKITOS]", "от ELEMENT-TEAM", "от Сборка Урода", "от GoldenShara", "от SHIZA [ShadMG]", "от R.G.BlackBoX", "от Трактир", "от NewStudio", "от Extended Cut", "от Extended Edition", "от R.G.", "от Games-", "от ArtSound", "от Кино-Юм", "от KS", "от Razda4ka", "от Element-Team", "от HQ-VIDEO", "от SHIZA [ShadMG]", "от DXPort", "от Spieler", "от UNRATED", "от LOOK", "от ed rez", "от 3HR&Zer0", "от Киномагия", "от FireBit-Films", "от PowerTracker", "от Generalfilm", "от sYsTem", "от HDReactor", "от RG FaSt-ReLiSe", "от RuSub", "от Firebit-ретро", "от HiSound", "от Firebit-Music", "от FireBit", "от КомРина", "от Best-Music", "от R.G Repacker's", "by Suprug (BigFANGroup)", "by OpenSharing", "by HQ-ViDEO", "by HELLYWOOD", "by CGInfo", "by Бультерьер", "by HD-Te@m", "by PlanetaUA", "by LostFilm", "by NovaFiLM", "by Friends-Club", "by Bumblebee", "by INTERFILM", "by 25KADR", "by Vvv", "by HQCLUB", "by UaTeam", "by ExKinoRay", "by AnimeReactor", "by BigFANGroup", "by FreeTorrents-UA", "by FS-Media", "by Dizell", "by Lukavaya", "by NOLIMITS-TEAM", "by КинозалSAT", "by Hurtom", "by AndrewWhite", "by Neofilm", "by HQRips", "by MassTorr", "by NovaLan", "by BestSound ExKinoRay", "by Кинозал", "by ParadiSe", "by Lossless", "by ParadiSe Кинозал", "by Vaippp", "by GREEN TEA", "by KinoZalSat", "by VinylRip", "by Files-x", "by Xixidok", "by Japan mini-lp Remasters", "by olegek70", "by AniFilm", "by Torrent-Games", "by ivandubskoj", "by Traumer | Reloading", "by Freeisland", "by den904", "by R.G. GoldenShara | Extended", "by R.G. GoldenShara", "by SergV", "by Theatrical Cut", "by Director's Cut", "by Sergei7721", "by Релиз ®", "by Widok", "by KimVlad & ANDROZZZ", "by KINOREAKTOR", "by gegemaunt & Psycho-Share", "by 100 ТВ", "by ®", "by R.G.Packers", "by Snowrecords", "by R.G.Игроманы", "by egoleshik", "by R.G. RuTor", "by VIDEODB", "by BestSound", "by (AVO @PD)", "by Лье Ло", "by Riper AM", "by Smart's Studios & Onefilm", "by Smart's Studios", "by Onefilm", "by RipOnline", "by X-DIGITAL", "by Рипер ОК!", "by bvsbns", "by РиперАМ", "by ed_rez", "by Rip Spieler", "by Enigma-Vladislav71", "by R.G. Repacker's", "by & Ivnet-Cinema", "by R.G. Catalyst", "by R.G. Механики", "by R.G. Origami", "by RiperAM", "by КinoZalSat", "by DHT-Movies", "by Релиз", "by GENADIY", "by (VO-production)", "by КиноРай.ТВ", "by Хтабыч", "by Kosmos", "by Sheikn", "by BigFANGrop", "by AntiBobr", "by SatTV", "by СТС", "by R.G. Element Arts", "by xatab", "by Firebit-Films", "by q1q1", "by Кубик в Кубе", "by PROPER", "by DreamRecords", "by Theatrical Cut PROPER", "by SMALL-RiP", "by Firebit-Ретро", "by SHIZA [NIKITOS]", "by ELEMENT-TEAM", "by Сборка Урода", "by GoldenShara", "by SHIZA [ShadMG]", "by R.G.BlackBoX", "by Трактир", "by NewStudio", "by Extended Cut", "by Extended Edition", "by R.G.", "by Games-", "by ArtSound", "by Кино-Юм", "by KS", "by Razda4ka", "by Element-Team", "by HQ-VIDEO", "by SHIZA [ShadMG]", "by DXPort", "by Spieler", "by UNRATED", "by LOOK", "by ed rez", "by 3HR&Zer0", "by Киномагия", "by FireBit-Films", "by PowerTracker", "by Generalfilm", "by sYsTem", "by HDReactor", "by RG FaSt-ReLiSe", "by RuSub", "by Firebit-ретро", "by HiSound", "by Firebit-Music", "by FireBit", "by КомРина", "by Best-Music", "by R.G Repacker's","- Suprug (BigFANGroup)", "- OpenSharing", "- HQ-ViDEO", "- HELLYWOOD", "- CGInfo", "- Бультерьер", "- HD-Te@m", "- PlanetaUA", "- LostFilm", "- NovaFiLM", "- Friends-Club", "- Bumblebee", "- INTERFILM", "- 25KADR", "- Vvv", "- HQCLUB", "- UaTeam", "- ExKinoRay", "- AnimeReactor", "- BigFANGroup", "- FreeTorrents-UA", "- FS-Media", "- Dizell", "- Lukavaya", "- NOLIMITS-TEAM", "- КинозалSAT", "- Hurtom", "- AndrewWhite", "- Neofilm", "- HQRips", "- MassTorr", "- NovaLan", "- BestSound ExKinoRay", "- Кинозал", "- ParadiSe", "- Lossless", "- ParadiSe Кинозал", "- Vaippp", "- GREEN TEA", "- KinoZalSat", "- VinylRip", "- Files-x", "- Xixidok", "- Japan mini-lp Remasters", "- olegek70", "- AniFilm", "- Torrent-Games", "- ivandubskoj", "- Traumer | Reloading", "- Freeisland", "- den904", "- R.G. GoldenShara | Extended", "- R.G. GoldenShara", "- SergV", "- Theatrical Cut", "- Director's Cut", "- Sergei7721", "- Релиз ®", "- Widok", "- KimVlad & ANDROZZZ", "- KINOREAKTOR", "- gegemaunt & Psycho-Share", "- 100 ТВ", "- ®", "- R.G.Packers", "- Snowrecords", "- R.G.Игроманы", "- egoleshik", "- R.G. RuTor", "- VIDEODB", "- BestSound", "- (AVO @PD)", "- Лье Ло", "- Riper AM", "- Smart's Studios & Onefilm", "- Smart's Studios", "- Onefilm", "- RipOnline", "- X-DIGITAL", "- Рипер ОК!", "- bvsbns", "- РиперАМ", "- ed_rez", "- Rip Spieler", "- Enigma-Vladislav71", "- R.G. Repacker's", "- & Ivnet-Cinema", "- R.G. Catalyst", "- R.G. Механики", "- R.G. Origami", "- RiperAM", "- КinoZalSat", "- DHT-Movies", "- Релиз", "- GENADIY", "- (VO-production)", "- КиноРай.ТВ", "- Хтабыч", "- Kosmos", "- Sheikn", "- BigFANGrop", "- AntiBobr", "- SatTV", "- СТС", "- R.G. Element Arts", "- xatab", "- Firebit-Films", "- q1q1", "- Кубик в Кубе", "- PROPER", "- DreamRecords", "- Theatrical Cut PROPER", "- SMALL-RiP", "- Firebit-Ретро", "- SHIZA [NIKITOS]", "- ELEMENT-TEAM", "- Сборка Урода", "- GoldenShara", "- SHIZA [ShadMG]", "- R.G.BlackBoX", "- Трактир", "- NewStudio", "- Extended Cut", "- Extended Edition", "- R.G.", "- Games-", "- ArtSound", "- Кино-Юм", "- KS", "- Razda4ka", "- Element-Team", "- HQ-VIDEO", "- SHIZA [ShadMG]", "- DXPort", "- Spieler", "- UNRATED", "- LOOK", "- ed rez", "- 3HR&Zer0", "- Киномагия", "- FireBit-Films", "- PowerTracker", "- Generalfilm", "- sYsTem", "- HDReactor", "- RG FaSt-ReLiSe", "- RuSub", "- Firebit-ретро", "- HiSound", "- Firebit-Music", "- FireBit", "- КомРина", "- Best-Music", "- R.G Repacker's", "| Suprug (BigFANGroup)", "| OpenSharing", "| HQ-ViDEO", "| HELLYWOOD", "| CGInfo", "| Бультерьер", "| HD-Te@m", "| PlanetaUA", "| LostFilm", "| NovaFiLM", "| Friends-Club", "| Bumblebee", "| INTERFILM", "| 25KADR", "| Vvv", "| HQCLUB", "| UaTeam", "| ExKinoRay", "| AnimeReactor", "| BigFANGroup", "| FreeTorrents-UA", "| FS-Media", "| Dizell", "| Lukavaya", "| NOLIMITS-TEAM", "| КинозалSAT", "| Hurtom", "| AndrewWhite", "| Neofilm", "| HQRips", "| MassTorr", "| NovaLan", "| BestSound ExKinoRay", "| Кинозал", "| ParadiSe", "| Lossless", "| ParadiSe Кинозал", "| Vaippp", "| GREEN TEA", "| KinoZalSat", "| VinylRip", "| Files-x", "| Xixidok", "| Japan mini-lp Remasters", "| olegek70", "| AniFilm", "| Torrent-Games", "| ivandubskoj", "| Traumer | Reloading", "| Freeisland", "| den904", "| R.G. GoldenShara | Extended", "| R.G. GoldenShara", "| SergV", "| Theatrical Cut", "| Director's Cut", "| Sergei7721", "| Релиз ®", "| Widok", "| KimVlad & ANDROZZZ", "| KINOREAKTOR", "| gegemaunt & Psycho-Share", "| 100 ТВ", "| ®", "| R.G.Packers", "| Snowrecords", "| R.G.Игроманы", "| egoleshik", "| R.G. RuTor", "| VIDEODB", "| BestSound", "| (AVO @PD)", "| Лье Ло", "| Riper AM", "| Smart's Studios & Onefilm", "| Smart's Studios", "| Onefilm", "| RipOnline", "| X-DIGITAL", "| Рипер ОК!", "| bvsbns", "| РиперАМ", "| ed_rez", "| Rip Spieler", "| Enigma-Vladislav71", "| R.G. Repacker's", "| & Ivnet-Cinema", "| R.G. Catalyst", "| R.G. Механики", "| R.G. Origami", "| RiperAM", "| КinoZalSat", "| DHT-Movies", "| Релиз", "| GENADIY", "| (VO-production)", "| КиноРай.ТВ", "| Хтабыч", "| Kosmos", "| Sheikn", "| BigFANGrop", "| AntiBobr", "| SatTV", "| СТС", "| R.G. Element Arts", "| xatab", "| Firebit-Films", "| q1q1", "| Кубик в Кубе", "| PROPER", "| DreamRecords", "| Theatrical Cut PROPER", "| SMALL-RiP", "| Firebit-Ретро", "| SHIZA [NIKITOS]", "| ELEMENT-TEAM", "| Сборка Урода", "| GoldenShara", "| SHIZA [ShadMG]", "| R.G.BlackBoX", "| Трактир", "| NewStudio", "| Extended Cut", "| Extended Edition", "| R.G.", "| Games-", "| ArtSound", "| Кино-Юм", "| KS", "| Razda4ka", "| Element-Team", "| HQ-VIDEO", "| SHIZA [ShadMG]", "| DXPort", "| Spieler", "| UNRATED", "| LOOK", "| ed rez", "| 3HR&Zer0", "| Киномагия", "| FireBit-Films", "| PowerTracker", "| Generalfilm", "| sYsTem", "| HDReactor", "| RG FaSt-ReLiSe", "| RuSub", "| Firebit-ретро", "| HiSound", "| Firebit-Music", "| FireBit", "| КомРина", "| Best-Music", "| R.G Repacker's", "Suprug (BigFANGroup)", "OpenSharing", "HQ-ViDEO", "HELLYWOOD", "CGInfo", "Бультерьер", "HD-Te@m", "PlanetaUA", "LostFilm", "NovaFiLM", "Friends-Club", "Bumblebee", "INTERFILM", "25KADR", "Vvv", "HQCLUB", "UaTeam", "ExKinoRay", "AnimeReactor", "BigFANGroup", "FreeTorrents-UA", "FS-Media", "Dizell", "Lukavaya", "NOLIMITS-TEAM", "КинозалSAT", "Hurtom", "AndrewWhite", "Neofilm", "HQRips", "MassTorr", "NovaLan", "BestSound ExKinoRay", "Кинозал", "ParadiSe", "Lossless", "ParadiSe Кинозал", "Vaippp", "GREEN TEA", "KinoZalSat", "VinylRip", "Files-x", "Xixidok", "Japan mini-lp Remasters", "olegek70", "AniFilm", "Torrent-Games", "ivandubskoj", "Traumer | Reloading", "Freeisland", "den904", "R.G. GoldenShara | Extended", "R.G. GoldenShara", "SergV", "Theatrical Cut", "Director's Cut", "Sergei7721", "Релиз ®", "Widok", "KimVlad & ANDROZZZ", "KINOREAKTOR", "gegemaunt & Psycho-Share", "100 ТВ", "®", "R.G.Packers", "Snowrecords", "R.G.Игроманы", "egoleshik", "R.G. RuTor", "VIDEODB", "BestSound", "(AVO @PD)", "Лье Ло", "Riper AM", "Smart's Studios & Onefilm", "Smart's Studios", "Onefilm", "RipOnline", "X-DIGITAL", "Рипер ОК!", "bvsbns", "РиперАМ", "ed_rez", "Rip Spieler", "Enigma-Vladislav71", "R.G. Repacker's", "& Ivnet-Cinema", "R.G. Catalyst", "R.G. Механики", "R.G. Origami", "RiperAM", "КinoZalSat", "DHT-Movies", "Релиз", "GENADIY", "(VO-production)", "КиноРай.ТВ", "Хтабыч", "Kosmos", "Sheikn", "BigFANGrop", "AntiBobr", "SatTV", "СТС", "R.G. Element Arts", "xatab", "Firebit-Films", "q1q1", "Кубик в Кубе", "PROPER", "DreamRecords", "Theatrical Cut PROPER", "SMALL-RiP", "Firebit-Ретро", "SHIZA [NIKITOS]", "ELEMENT-TEAM", "Сборка Урода", "GoldenShara", "SHIZA [ShadMG]", "R.G.BlackBoX", "Трактир", "NewStudio", "Extended Cut", "Extended Edition", "R.G.", "Games-", "ArtSound", "Кино-Юм", "KS", "Razda4ka", "Element-Team", "HQ-VIDEO", "SHIZA [ShadMG]", "DXPort", "Spieler", "UNRATED", "LOOK", "ed rez", "3HR&Zer0", "Киномагия", "FireBit-Films", "PowerTracker", "Generalfilm", "sYsTem", "HDReactor", "RG FaSt-ReLiSe", "RuSub", "Firebit-ретро", "HiSound", "Firebit-Music", "FireBit", "КомРина", "Best-Music", "R.G Repacker's", "()", "[]");// Подгружаем страницу релиза
$this_content = file_get_contents('http://opensharing.org/torrent/'.$releases_id.'/');// Если не возможна открыть страницу берем следущую.
if(!$this_content)
{
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$result["id"]."'") or sqlerr(__FILE__, __LINE__);
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
echo 'Не могу открыть страницу - <font color=red><b>Ошибка</b></font>';
die;
}// Константа для название торрента
define('MD5XA', md5('http://opensharing.org/torrent/'.$releases_id.'/'));// Узнаем будущий id роздачи
$query1 = mysql_query("SHOW TABLE STATUS LIKE 'torrents'");
$result1 = mysql_fetch_array($query1);
$next_id_torrent = $result1['Auto_increment'];// Парсим название релиза
preg_match('/<title>(.*?)<\/title\>/is', $this_content, $title);// Удаляем не нужные елементы
$name = trim(str_replace("OpenSharing.ORG :: ", "", $title[1]));// Переконвертирование
$name = utf8_to_win($name);// Если роздача не существует, переходим на следущую
if (stristr($name,'Раздача не существует!'))
{
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$result["id"]."'") or sqlerr(__FILE__, __LINE__);
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
echo '<b><font color=red>Даной раздачи не существует</font></b>.';
die;
}// В название релиза удаляем авторов,групы
$name = trim(str_replace($reliz, '', $name));$name_count = get_row_count("torrents","WHERE name=".sqlesc($name));
// Если есть название релиза на сайте переходим к следуйщей роздачи
if($name_count)
{
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$result["id"]."'") or sqlerr(__FILE__, __LINE__);
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
echo '</br><b><font color=red>Данний релиз уже есть на сайте</font></b>.';
die;
}// Если название релиза пустое или минимум 3 символа - не парсим
if(empty($name) or strlen($name) < 3)
{
echo '</br>Названние роздачи - <b><font color=red>не спарсировано</font></b>.';
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$result["id"]."'") or sqlerr(__FILE__, __LINE__);
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
die;
} else {
echo '</br>Названние роздачи - <b><font color=green>спарсировано</font></b>.';
}// Узнаем какая категория релиза на opensharing.org
preg_match_all('/<td>(.*?)<\/td>/is', $this_content, $cats);
$cats = strip_tags(utf8_to_win($cats[0][4]));//Определяем категорию релиза
if (stristr($name,'DVDRIP') || stristr($cats,'Кино'))
$catid="13"; /// Фильмы / AVI
elseif (stristr($cats,'телевизор') || stristr($name,'TVRip'))
$catid="22"; /// TV / Документалки
elseif (stristr($cats,'Сериалы'))
$catid="11"; /// Сериалы
elseif (stristr($cats,'Музыка') || stristr($name,'MP3') || stristr($name,'FLAC'))
$catid="10"; /// Музыка / Мультимедиа
elseif (stristr($cats,'Игры'))
$catid="5"; /// Игры / ПК
elseif (stristr($name,'Аниме'))
$catid="12"; /// Аниме
elseif (stristr($name,'Мультипликация') || stristr($cats,'Мультипликация'))
$catid="6"; /// Мультфильмы
elseif (stristr($name,'JPEG') || stristr($name,'JPG') || stristr($name,'HQ'))
$catid="25"; /// Картинки / Фото
elseif (stristr($cats,'софт'))
$catid="26"; /// Софт / Windows
elseif (stristr($name,'WMV') || stristr($name,'КПК') || stristr($name,'MP4'))
$catid="18"; /// Клипы / Ролики / Приколы
elseif (stristr($cats,'книги') || stristr($name,'PDF'))
$catid="16"; /// книги
elseif (stristr($name,'DVD'))
$catid="15"; /// DVD / Фильмы
else
$catid="4";if($catid)
{
echo '</br>Категория роздачи - <b><font color=green>определённа</font></b>.';
} else {
echo '</br>Категория роздачи - <b><font color=red>не определённа</font></b>.';
}//Парсим описание
preg_match('/<table id="details">(.*?)<\/table>/ius', $this_content, $table_details);
preg_match('/<td>(.*)<br \/><\/td><\/tr>/is', $table_details[0], $descr);// Переконвертирование
$desc = utf8_to_win($descr[0]);// Парсим постер релиза
preg_match("/<img.*?src=\"(http:\/\/[^()<>\s]+?)\"[^>]*?>/i", $desc, $poster);$end_image=trim($poster[1]);
$uploaddir = ROOT_PATH."torrents/images/";// Проверка на пустоту постера
if (!empty($end_image))
{
$image=@file_get_contents($end_image);
echo "</br>Постер - <b><font color=green>найден</font></b>.";
} else {
echo "</br>Постер - <b><font color=red>не найден</font></b>.";
}// Проверям постер
if (!empty($image))
{
// Будущие название постера
$ifileimg = $next_id_torrent.'.'.end(explode('.',$end_image));
// Удаляем старый постер если таковой существует
$posters = @unlink($uploaddir.$ifileimg);
if($posters)
{
echo "</br>Старий постер - <font color=green><b>удален!</b></font>\n";
}
// Копируем постер
if (!copy($end_image, $uploaddir.$ifileimg))
{
echo "</br><font color=red><b>Не удалось скопировать постер</b></font>\n";
} else {
echo "</br>Постер - <font color=green><b>скопирован</b></font>.\n";
}
}
//Ищем ссылки на скриншоты
preg_match_all('/<a href="(.*?)"><img.*?><\/a>/i', $desc, $pic);
//Ищем сами скриншоты
preg_match_all("/<img.*?src=\"(http:\/\/[^()<>\s]+?)\"[^>]*?>/i", $desc, $pic11111);//<img.*?src=\"(.*?)\".*>$link_image=array();
$xpio = 1;// Вытягиваем все из массива
foreach ($pic[1] as $ksf)
{
// Замена названий скриншотов для ipicture
$array_html = array("jpg.html","gif.html","bmp.html","png.html","jpeg.html");
$array_form = array("jpg","gif","bmp","png","jpeg");$ksf = trim(str_replace($array_html, $array_form, $ksf));
// Для firepic проверка
if(preg_match('/firepic\.org/i', $ksf, $firepic) )
{
// Подгружаем страницу
$firepic_content = file_get_contents($ksf);
// Находим изображенния
if(preg_match('<img src=(.*?) alt="" width="">', $firepic_content, $firepic_link) )
{
// Заносим в переменую для дальнейшого использования
$ksf = $firepic_link[1];
} else {
// Заносим в временную переменую
$ksf = $ksf;
}
}
// Узнаем розширенния скриншота
if (list($width, $height) = @getimagesize($ksf))
{
// Если скриншот в ширену менше 300 и в висоту менше 150 не парсим скриншот
if ($width>=300 && $height>=150 && $width>=$height)
{
// Заносим в переменую
$link_image[$xpio] = $ksf;
// Если 4 скриншота найденно перериваем парсинг скриншотов
if ($xpio<5)
{
echo '</br>Скриншот (№'.$xpio.') спарсирован, размер('.$width.'x'.$height.') - <b><font color=green>Успешно</font></b>';
}
++$xpio;
}
}
}// Вытягиваем все из массива
foreach ($pic11111[1] as $ksf)
{
// Для firepic проверка
if(preg_match('/firepic\.org/i', $ksf, $firepic) )
{
// Подгружаем страницу
$firepic_content = file_get_contents($ksf);
// Находим изображенния
if(preg_match('<img src=(.*?) alt="" width="">', $firepic_content, $firepic_link) )
{
// Заносим в переменую для дальнейшого использования
$ksf = $firepic_link[1];
} else {
// Заносим в временную переменую
$ksf = $ksf;
}
}
// Для lostpic проверка
if(preg_match('/lostpic\.net/i', $ksf, $lostpic) )
{
// Замена
$ksf = str_replace("thumbs", "images", $ksf);
}
// Для 10pix проверка
if(preg_match('/10pix\.ru/i', $ksf, $pix) )
{
// Замена
$ksf = str_replace(".th", "", $ksf);
}
// Для ximages проверка
if(preg_match('/ximages\.net/i', $ksf, $ximages) )
{
// Замена
$ksf = str_replace("viewer.php?file=", "images/", $ksf);
$ksf = str_replace("_thumb", "", $ksf);
}
// Для iceimg проверка
if(preg_match('/iceimg\.ru/i', $ksf, $iceimg) )
{
// Замена
$ksf = str_replace("dt", "di", $ksf);
}
// Для imageban проверка
if(preg_match('/imageban\.ru/i', $ksf, $imageban) )
{
// Замена
$ksf = str_replace("thumbs", "out", $ksf);
}
// Для twinpix проверка
if(preg_match('/twinpix\.nu/i', $ksf, $twinpix) )
{
// Замена
$ksf = str_replace("stamp", "full", $ksf);
}
// Узнаем розширенния скриншота
if (list($width, $height) = @getimagesize($ksf))
{
// Если скриншот в ширену менше 300 и в висоту менше 150 не парсим скриншот
if ($width>=300 && $height>=150 && $width>=$height)
{
// Заносим в переменую
$link_image[$xpio] = $ksf;
// Если 4 скриншота найденно перериваем парсинг скриншотов
if ($xpio<5)
{
echo '</br>Скриншот (№'.$xpio.') спарсирован, размер('.$width.'x'.$height.') - <b><font color=green>Успешно</font></b>';
}
++$xpio;
}
}
}// Проверка на теги
preg_match_all('/<a href=\'(.*?)+tags.*?\'>(.*?)<\/a>/i', $desc, $ptags);$array_tags = $ptags[2];
// Находим теги
if (count($array_tags))
{
echo '</br>Теги для роздачи - <b><font color=green>найдены ('.count($array_tags).')</font></b>';
// Удаляем дубликати тегов
$array_tags = array_unique($array_tags);// Вытягиваем все из массива
foreach ($array_tags as $tage)
{
// Удаляем пробелы, все символы переводим в нижний реестер
$tage = tolower(trim(htmlspecialchars_uni($tage)));
// Если нету тегов, продолжаем дальше
if (!empty($tage))
{
echo '</br>Добавляен тег: <b>'.$tage.'</b>';
// Добавляем теги
sql_query("INSERT INTO tags (category, name, howmuch,added) VALUES (".sqlesc($catid).", ".sqlesc($tage).", 1, ".sqlesc(get_date_time()).")");
sql_query("UPDATE tags SET howmuch=howmuch+1 WHERE name LIKE ".sqlesc($tage)) or sqlerr(__FILE__, __LINE__);
$tags[] = $tage;
}}
// Проверка на теги
if (count($tags))
{
// Все теги делаем через кому, и заносим в переменую
$tags_sql = implode(",", $tags);
}
} else {
echo '</br>Теги для роздачи - <b><font color=red>не найдены</font></b>';
}// <b> -
$desc = preg_replace('/<b>(.*?)<\/b\>/is', "[b]\\1", $desc);
// <i> -
$desc = preg_replace('/<i>(.*?)<\/i\>/is', "[i]\\1", $desc);
// <u> -
$desc = preg_replace('/<u>(.*?)<\/u\>/is', "[u]\\1", $desc);
// <font size=> -
$desc = preg_replace('/<font size=(.*?)>(.*?)<\/font\>/is', "[size=\\1]\\2", $desc);
// <font color=> - [color=]
$desc = preg_replace('/<font color=(.*?)>(.*?)<\/font\>/is', "[color=\\1]\\2[/color]", $desc);
// <font face=> - текст
$desc = preg_replace('/<font face=(.*?)>(.*?)<\/font\>/is', "\\2", $desc);
// <li> - [li]
$desc = preg_replace('/<li>/is', "[li]", $desc);
// <div> - текст
$desc = preg_replace('/<div.*?>(.*?)<\/div\>/is', "\\2", $desc);
// <textarea> - текст, спойлер можно сделать
$desc = preg_replace('/<textarea+(.*?)>(.*?)<\/textarea><\/div>/is', "\\2", $desc);
// <a href=(gif|jpg|jpeg|png)> - --[br]", $desc);
// <a href=> - $desc = preg_replace("/<a.*?href=\"(http:\/\/[^()<>\s]+?)\"[^>]*?>(.*?)<\/a>/i", "[url=\\1]\\2", $desc);
// <img src=(gif|jpg|jpeg|png)> - --[br]", $desc);
// <var title=(gif|jpg|jpeg|png)> - --[br]", $desc);
// <(td|tr)> - пусто
$desc = preg_replace('/<(.*?)(td|tr)>/', "", $desc);
// <a> - пусто
$desc = preg_replace('/<(\/a|a)+(.*?)>/', "", $desc);
// <br /> - пусто
$desc = str_replace("<br />", "", $desc);
// <br /><br /> - \n
$desc = str_replace("<br /><br />", "\n", $desc);
// <br /><br /><br /> - \n
$desc = str_replace("<br /><br /><br />", "\n", $desc);
// <br /><br /><br /><br /> - \n
$desc = str_replace("<br /><br /><br /><br />", "\n", $desc);// Если нету описания к торренту переходим к следуйщему релизу
if (empty($desc))
{
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$result["id"]."'") or sqlerr(__FILE__, __LINE__);
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
echo '</br>Описания - <b><font color=red>пустое</font></b>.';
die;
} else {
echo '</br>Описания - <b><font color=green>спарсировано</font></b>.';
}/**
*
* Функция: get_torrent
* Автор: VictoRD11 aka 6atafan~
* Дата: 17.01.2012
* Параметры: (int) id, path
* Вернеться: (string) infohash, size, count_files
*
**/
function get_torrent($id=false,$path) {global $id_grab;
// Силка на скучку .torrent
$path = "/download/".$path."/";
// Торрент трекер
$host = "opensharing.org";// Устанавливаем соединение
$fp = fsockopen($host, 80, $errno, $errstr, 25) or die("Нет подлючения в get_torrent функции .... <script>setTimeout('document.location.href=\"parser_open.php\"', 2000);</script>");
socket_set_timeout($fp,5,0);
// Проверяем успешность установки соединенияif ($fp) {
// Данные HTTP-запроса
$data = "";
// Заголовок HTTP-запроса
$headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= "Connection: Close\r\n";
$headers .= "\r\n";
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$line = fgets(($fp), 1024);
$date.=$line;
}
fclose($fp);
}list($data_1,$data_2) = explode("\r\n\r\n", $date);
$ifilename = ROOT_PATH."torrents/txt/".MD5XA.".torrent";
$sf = $ifilename;$fpsf = fopen($sf,"a+");
fputs($fpsf,$data_2);
fclose($fpsf);if(@file_exists($sf))
{
// Проверка розмера релиза
if(filesize($sf) >= 1024000)
{
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$id_grab."'") or sqlerr(__FILE__, __LINE__);
@unlink($sf);
echo "<script>setTimeout('document.location.href=\"parser_open.php\"', 1000);</script>";
echo '</br> .torrent файл весит больше 1 мегабайта - <b><font color=red>Ошибка</font></b>';
die;
}
$dict = bdec_file($sf, 1024000);
list($info) = dict_check_t($dict, "info");
list($dname, $plen, $pieces) = @dict_check_t($info, "name(string):piece length(integer):pieces(string)");$filelist = array();
$totallen = @dict_get_t($info, "length", "integer");
if (isset($totallen)) {
$filelist[] = array($dname, $totallen);
} else {
$flist = @dict_get_t($info, "files", "list");
$totallen = 0;
if (count($flist)){
foreach ($flist as $sf) {
list($ll, $ff) = @dict_check_t($sf, "length(integer):path(list)");
$totallen += $ll;
$ffa = array();
foreach ($ff as $ffe) {
$ffa[] = $ffe["value"];
}
$ffe = implode("/", $ffa);
$filelist[] = array($ffe, $ll);
}
}
}$dict=@bdec(@benc($dict));
@list($info) = @dict_check_t($dict, "info");
$infohash = sha1($info["string"]);$size=0;
if (!empty($totallen)){
sql_query("DELETE FROM files WHERE torrent = '".$id."'");
$count_files = 0;
foreach ($filelist as $file)
{
$file[0] = utf8_to_win($file[0]);$size = $size + $file[1];
// Добавленния в бд файлов
sql_query('INSERT INTO files (torrent, filename, size) VALUES ('.$id.', '.sqlesc($file[0]).', '.sqlesc($file[1]).')') or sqlerr(__FILE__, __LINE__);
$count_files++;
}
echo '</br> Перерасчет файлов в торренте - <b><font color=green>'.$count_files.' файлa(ов) добавлено</font></b>.';
} else {
@unlink(ROOT_PATH."torrents/txt/".MD5XA.".torrent");
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$id_grab."'") or sqlerr(__FILE__, __LINE__);
echo "<script>setTimeout('document.location.href=\"parser_open.php\"', 1000);</script>";
echo "</br>Размер .torrent 0кб. - <b><font color=red>Ошибка</font></b>";
die;
}}
if (empty($infohash))
$infohash = false;return array($infohash, $size, $count_files);
}// Проверка на хэш релиза
$torrent_hash = get_torrent($next_id_torrent, $releases_id);// Если хеш не вернулся значить ввиводим ошибку и переходим к следуйщему релизу
if ($torrent_hash[0] == false)
{
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$result["id"]."'") or sqlerr(__FILE__, __LINE__);
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
echo '</br>.torrent файл не могу прочитать - <b><font color=red>Ошибка</font></b>';
die;
}echo '</br><b>Хеш релиза определен</b> : '.$torrent_hash[0];
$hash = get_row_count("torrents","WHERE info_hash=".sqlesc($torrent_hash[0]));
// Если хеш есть в бд переходим к следуйщему релизу
if($hash)
{
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$result["id"]."'") or sqlerr(__FILE__, __LINE__);
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
echo '</br><b><font color=red>Данний релиз уже есть на сайте</font></b>.';
die;
}// Удаляем постер
if (!empty($end_image))
{
$desc = str_replace("--[br]", "", $desc);
}// Удаляем Скриншоты
foreach ($link_image as $delete_image)
{
$desc = str_replace("--[br]", "", $desc);
}// Удаляем Скриншоты
if(count($link_image))
{
$desc = str_replace("Скриншоты:", "", $desc);
$desc = str_replace("Скриншоты:", "", $desc);
$desc = preg_replace('#(\[img\]).*lostpic\.net/.*(\[/img\]\[br\])#i', '', $desc);
$desc = preg_replace('#(\[img\]).*firepic\.org/.*(\[/img\]\[br\])#i', '', $desc);
$desc = preg_replace('#(\[img\]).*10pix\.ru/.*(\[/img\]\[br\])#i', '', $desc);
$desc = preg_replace('#(\[img\]).*ximages\.net/.*(\[/img\]\[br\])#i', '', $desc);
$desc = preg_replace('#(\[img\]).*radikal\.ru/.*(\[/img\]\[br\])#i', '', $desc);
$desc = preg_replace('#(\[img\]).*imageban\.ru/.*(\[/img\]\[br\])#i', '', $desc);
$desc = preg_replace('#(\[img\]).*iceimg\.ru/.*(\[/img\]\[br\])#i', '', $desc);
$desc = preg_replace('#(\[img\]).*twinpix\.nu/.*(\[/img\]\[br\])#i', '', $desc);
}// Удаляем html теги
$desc = strip_tags($desc);
// \n\n - \n
$desc = str_replace("\n\n", "\n", $desc);
// \n\n\n - \n
$desc = str_replace("\n\n\n", "\n", $desc);
// \n\n\n\n - \n
$desc = trim(str_replace("\n\n\n\n", "\n", $desc));
// \n - пусто
$desc = trim(str_replace("\n", "", $desc));
// - пусто
$desc = str_replace(" ", "", $desc);
// - пусто
$desc = str_replace("", "", $desc);
// -- - пусто
//$desc = preg_replace("#\[url=.*?\][(\W)]?\[/url\]#i", "", $desc);
// Удаляем пробелы из описания в конце.
$descr = htmlspecialchars_uni(trim($desc));
// Удаляем пробелы из названия в конце.
$torrent = htmlspecialchars_uni(trim($name));// Кто заливает релиз
$own = $CURUSER['id'];
// Отображать релиз
$visi = sqlesc("yes");
// Релиз проверин
$moderated = sqlesc("yes");
// Релиз мультитрекерный
$multut = sqlesc("yes");
// Информацыя о релизе
$torrent_com = get_date_time() . ' граббер торрентов (http://opensharing.org/torrent/'.$releases_id.'/).';// Добавляем релиз в бд
$ret = sql_query("INSERT INTO torrents ( owner, moderated, moderatedby, moderatordate, visible, tags, image1, picture1, picture2, picture3, picture4, info_hash, size, numfiles, name, descr, torrent_com, category, added, last_action, multitracker) VALUES (" . implode(",", array_map("sqlesc", array($own, $moderated, $own, get_date_time(), $visi, $tags_sql, $ifileimg, $link_image[1], $link_image[2], $link_image[3], $link_image[4], $torrent_hash[0], $torrent_hash[1], $torrent_hash[2], $torrent, $descr, $torrent_com, $catid))) . ", '" . get_date_time() . "', '" . get_date_time() . "',".$multut.")") or sqlerr(__FILE__,__LINE__) ;// Узнаем id релиза
$id = mysql_insert_id();// Копируем торрент файл
$copy = @copy(ROOT_PATH.'torrents/txt/'.MD5XA.'.torrent', ROOT_PATH.'torrents/'.$id.'.torrent');if (!$copy)
{
echo '</br>Не могу скопировать торрент в папку - <b><font color=red>Ошибка</font></b>';
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
} else {
echo '</br>Торрент файл скопирован - <b><font color=green>Успешно</font></b>';
}
// Релиз успешно спарсирован
sql_query("UPDATE grab_open SET work='0' WHERE id = '".$result["id"]."'") or sqlerr(__FILE__, __LINE__);
echo '<script>setTimeout(\'document.location.href="parser_open.php"\', 1000);</script>';
echo '</br>Релиз <a href="http://opensharing.org/torrent/'.$releases_id.'/">'.$torrent.'</a> успешно спарсирован на трекер <a href="'.$DEFAULTBASEURL.'/details.php?id='.$id.'">'.$torrent.'</a>';// Статистика парсера
$arr = sql_query("SELECT COUNT(*) AS numgrab,(SELECT COUNT(*) FROM grab_open WHERE work='0') AS grabost FROM grab_open WHERE work='1'");
$row_arr = mysql_fetch_array($arr);echo "</br><b>Завершенно</b>: ".number_format(100-number_format(100 * (1 - ($row_arr["grabost"] / ($row_arr["grabost"]+$row_arr["numgrab"]))),2),2)."% (<b>Спарсировано</b>:".number_format($row_arr["grabost"]).":<b>Осталось</b>:".number_format($row_arr["numgrab"]).":<b>Всего</b>:".number_format($row_arr["grabost"] + $row_arr["numgrab"]).")";
$seconds = (timer() - $tstart);
$seconds = substr($seconds, 0, 8);
// Генерация страницы
echo '</br>Генерация : <font color=green><b>'.$seconds.'</b></font>';?>