RSS feed PHP script fyrir (íslenskar) torrent síður UPDATE!
Sent: Sun 24. Jún 2012 23:55
Ég er hér með PHP kóða sem getur farið inná lokaða torrent síðu, náð í upplýsingar um torrent og skilað því sem RSS feed. Á flestum torrent síðum er þetta óþarft en sumar síður bjóða ekki uppá RSS feed (eins og t.d. Deildu.net) og virkar þetta mjög vel í þeim tilvikum. Kóðinn var aðallega skrifaður til að virka með Deildu.net en það ætti að vera hægt að nota hann með öðrum torrent síðum sem nota sama torrent síðu kóða.
Fyrir þá sem vita ekki hvað RSS feed er þá er hægt að fræðast um það á Wikipedia. RSS torrent feed eins og þetta er hægt að nota til þess að fylgjast náið með þegar ný torrent koma á netið og svo er líka hægt að láta torrent forrit, eins og t.d. uTorrent, sækja sjálfkrafa efni sem viðkomandi er að leita eftir.
UPPSETNING
MEGA UPDATE!
Jæææja, nú er ég aldeilis með mega uppfærslu á þessu, algjörlega idiot-proof system Það eina sem þið þurfið að gera er eftirfarandi:
Restin af þessu innleggi skiptir ekki lengur máli fyrir utan leiðbeiningarnar varðandi uTorrent, hvernig eigi að setja feed þar inn (sjá aðeins neðar).
Have fun!
UPDATE!
Kóðinn hér að neðan mun ekki virka ef hann er afritaður og reynt að nota hann óbreyttann þar sem það koma óþarfa bil fremst í hverri línu, réttan kóða má nálgast HÉR
Hér er kóðinn:
Til að nota þennan kóða er gert eftirfarandi:
1. Afritaðu kóðan og vistaðu sem rss.php
2. Farðu efst í skránna og settu inn það notandanafn og lykilorð sem þú notar á þeirri torrent síðu sem þú ætlar að nota, einfaldast að breyta gildunum í $def_user og $def_pass
3. Settu skránna svo inná vefþjón sem styður PHP, þægilegast að hafa vefþjón í gangi á tölvunni sjálfri eins og t.d. Apache
Ef þú vilt ekki þurfa að setja vefþjón upp á tölvunni þinni eða bara kannt það ekki þá er líka hægt að setja skránna inná fría hýsingu eins og t.d. 000webhost.com.
Svo þarf að setja þetta upp í torrent forriti, tek hér sem dæmi uTorrent en það ætti að vera eitthvað svipað ferli í öðrum torrent forritum.
1. Þú opnar uTorrent og smellir á File og velur svo þar "Add RSS Feed...", getur líka hægri smellt á Feeds í dálkinum vinstra megin og valið það sama þar
2. Í reitinn "Feed URL" seturu slóðina á rss.php skránna ásamt page_id sem segir til um hvaða torrent síðu á að ná í frá, hafðu svo rest eins og myndin sýnir
Ef skráin er á vefþjón á tölvunni sjálfri þá er slóðin http://localhost/rss.php?page_id=deildu annars þarftu að finna út hvað slóðin er á vefþjóninum sem þú ert að nota. Ef þú bætir engu við slóðina eftir page_id þá koma slóðir á allar torrent skrár sem þú sérð venjulega þegar þú skoðar á torrent síðunni sjálfri en til að fá ákveðna flokka þá bætiru við cat=1-15. Hér er listi til að einfalda þetta:
1. Annað
2. Íþróttir
3. Mac
4. XXX(18+)
5. DVD-R
6. Kvikmyndir
7. Teiknimyndir
8. Þættir
9. Heimildaefni
10. Leikir
11. Tónlist
12. Hi-Def
14. Windows
15. Anime
Þannig að til að fá t.d. þætti þá myndiru hafa slóðina rss.php?page_id=deildu&cat=8. Þegar þetta hefur allt verið gert ættiru núna að geta séð lista yfir þau torrent sem þú hefur áhuga á þegar þú smellir á Deildu undir Feeds í uTorrent.
Ef allt hefur verið gert rétt geturu núna farið að nota þetta, þú getur einfaldlega tvísmellt á torrent sem þú vilt sækja í listanum sem birtist hægra meginn í uTorrent.
SJÁLFVIRKT NIÐURHAL
Í torrent forritum eins og uTorrent er hægt að stilla þannig að forritið fylgist með RSS feedinu og nær sjálfkrafa í það sem maður vill. Til að fræðast betur um það mæli ég með að skoða leiðbeiningar á uTorrent.com.
ATHUGIÐ!
Bara svo það sé á hreinu, þá ber ég enga ábyrgð á því hvernig þetta er notað
ANNAÐ
Fyrir þá sem bíða eflaust mjög spenntir eftir næstu útgáfu af IceNet Monitor þá hef ég bara verið alltof upptekinn síðustu mánuði til þess að vinna í því en ég mun reyna að koma útgáfu 2.0 út fyrir lok sumars. Svo er von á fyrstu útgáfu Vaktar tólsins á sama tíma (og kannski líka fyrir Mac)
Fyrir þá sem vita ekki hvað RSS feed er þá er hægt að fræðast um það á Wikipedia. RSS torrent feed eins og þetta er hægt að nota til þess að fylgjast náið með þegar ný torrent koma á netið og svo er líka hægt að láta torrent forrit, eins og t.d. uTorrent, sækja sjálfkrafa efni sem viðkomandi er að leita eftir.
UPPSETNING
MEGA UPDATE!
Jæææja, nú er ég aldeilis með mega uppfærslu á þessu, algjörlega idiot-proof system Það eina sem þið þurfið að gera er eftirfarandi:
- Ná í rss.zip
- Afþjáppa í möppu á server sem er með PHP stuðning
- Opna svo slóðina http://server/mappa/rss.php
- Setja inn stillingar og vista
- Afrita RSS slóðina sem er gefin upp og nota í torrent forriti
Restin af þessu innleggi skiptir ekki lengur máli fyrir utan leiðbeiningarnar varðandi uTorrent, hvernig eigi að setja feed þar inn (sjá aðeins neðar).
Have fun!
UPDATE!
Kóðinn hér að neðan mun ekki virka ef hann er afritaður og reynt að nota hann óbreyttann þar sem það koma óþarfa bil fremst í hverri línu, réttan kóða má nálgast HÉR
Hér er kóðinn:
Kóði: Velja allt
<?
error_reporting(E_ALL & ~E_NOTICE);
// set_time_limit(0);
// Skilgreinum sjálfgefið notandanafn og lykilorð, þægilegt ef notaðar eru margar síður og alltaf sama notandanafn og lykilorð
$def_user = 'notandi';
$def_pass = 'lykilorð';
// Setjum hér upp tengingu við torrent síðu(r)
// addPage(page_id, nafn, heimasíða, browse-slóð, login-slóð, notandanafn, lykilorð, eitthvað sem finnst ekki í html kóða eftir rétt login)
$tp = new TorrentPages();
$tp->addPage('deildu', 'Deildu.net', 'http://deildu.net/', 'browse.php', 'takelogin.php', $def_user, $def_pass, 'loginform');
//$tp->addPage('', '', '', '', '', $def_user, $def_pass, '');
// Athugum hvort það sé verið að sækja torrent skrá
if ($_GET['file'] && $_GET['page_id']) $tp->getTorrentFile($_GET['page_id'], $_GET['file']);
// Prentum út RSS
$tp->showRss($_GET['page_id']);
// Fáum hér rest af query sem er notuð áfram á torrent síðunni
function getQuery() {
return preg_replace('/^page_id=[^&]+(&file=[^&]+)?&?/i', '', $_SERVER['QUERY_STRING']);
}
// Fáum nafn á cookie skrá
function getCookie($page_id) {
return $page_id . '-cookie.txt';
}
// Fáum slóðina á þetta feed
function getFeedurl() {
return 'http' . ($_SERVER['HTTPS'] == 'on' ? 's' : '') . '://' . $_SERVER['SERVER_NAME'] . ($_SERVER['SERVER_PORT'] != '80' ? $_SERVER['SERVER_PORT'] : '') . $_SERVER['SCRIPT_NAME'];
}
class LoginPage {
public $page_id, $title, $url, $url_browse, $url_login, $user, $pass, $fail_match, $works = false, $data;
public function __construct($page_id, $title, $url, $url_browse, $url_login, $user, $pass, $fail_match) {
$this->page_id = $page_id;
$this->title = $title;
$this->url = $url;
$this->url_browse = $url . $url_browse;
$this->url_login = $url . $url_login;
$this->user = $user;
$this->pass = $pass;
$this->fail_match = $fail_match;
$this->pubDate = date('r');
$this->cookie = getCookie($page_id);
}
}
class TorrentFile {
public $title, $url, $pubDate;
public function __construct($page_id, $title, $url, $pubDate, $page_url) {
$this->title = trim($title);
$this->url = getFeedurl() . '?page_id=' . $page_id . '&file=' . $page_url . $url;
$this->pubDate = date('r', strtotime($pubDate));
}
}
class TorrentPages {
public $pagelist = Array(), $filelist = Array(), $error = false;
// Aðgerð sem setur torrent síðu upp
public function addPage($page_id, $title, $url, $url_browse, $url_login, $user, $pass, $fail_match) {
$this->pagelist[$page_id] = new LoginPage($page_id, $title, $url, $url_browse, $url_login, $user, $pass, $fail_match);
}
// Reynum innskráningu, sleppum því ef cookie skrá er til
public function doLogin($page_id) {
if (!$this->pagelist[$page_id]) return $this->setError('Parameter page_id not correct!');
$page =& $this->pagelist[$page_id];
// Ef cookie skrá er til þá þarf ekki að innskrá
if (file_exists($this->cookie)) {
$page->works = true;
return true;
}
// Notum curl til að innskrá
$postdata = 'username=' . $page->user . '&password=' . $page->pass;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $page->url_login);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_COOKIEJAR, $page->cookie);
curl_setopt($curl, CURLOPT_REFERER, $page->url);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_POST, true);
$result = curl_exec($curl);
curl_close($curl);
if ($result != '') return $this->setError('Login into "' . $page_id . '" failed!');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $page->url_browse . '?' . getQuery());
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_COOKIEFILE, $page->cookie);
$result = curl_exec($curl);
curl_close($curl);
if (!$result) return $this->setError('Browsing "' . $page_id . '" failed!');
$page->data = $result;
$page->works = true;
return true;
}
// Ná í torrent lista
public function getTorrents($page_id = null) {
if (!$page_id) return $this->setError('Parameter page_id missing!');
if (!$this->pagelist[$page_id]) return $this->setError('Page id "' . $page_id . '" not found!');
$page =& $this->pagelist[$page_id];
if (!$page->works) {
// Reynum innskráningu, athugum svo hvort það tókst
$this->doLogin($page_id);
if ($page->fail_match && preg_match('/' . $page->fail_match . '/', $page->data)) return $this->setError('Failed match on "' . $page_id . '", not logged in');
}
$data = utf8_encode($page->data);
// Ef flokkur er valin setjum við hann í titil
if (preg_match('/<input[^>]+checkbox[^>]+checked[^>]+><a [^>]+>([^<]+)/i', $data, $matches)) $page->title .= ' - ' . $matches[1];
// Hreinsum HTML kóða síðunnar
$data = preg_replace(array('#<script[^>]*>.*</script>#simU', '#<img[^>]+>#i'), '', $data);
$data = strip_tags($data, '<a><br>');
$data = preg_replace(array('/>\s+/', '/\s+</'), array('>', '<'), $data);
// Síum út allar torrent skrár og setjum í lista
$this->filelist[$page_id] = array();
if (preg_match_all('|<a[^>]+href="details[^>]+>([^<]+)</a>[^<]*<a[^>]+href="(download[^"]+)".+([\d]{4}-[\d]{2}-[\d]{2})<[^>]+>([\d]{2}:[\d]{2}:[\d]{2})[^\d]+[^<]+<[^>]+>[GM]B|simU', $data, $matches)) {
$c = count($matches[0]);
for ($i = 0; $i < $c; $i++) {
$title = $matches[1][$i];
$url = $matches[2][$i];
$pubDate = $matches[3][$i] . ' ' . $matches[4][$i];
$this->filelist[$page_id][] = new TorrentFile($page_id, $title, $url, $pubDate, $page->url);
}
return true;
}
return $this->setError('No torrents found!');
}
// Notum curl til að sækja torrent skrá
public function getTorrentFile($page_id, $file) {
// Reynum innskráningu, ætti ekki að klikka, ef cookie skrá er til þá þarf ekki að innskrá
if (!$this->doLogin($page_id)) die;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $file);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_COOKIEFILE, getCookie($page_id));
$result = curl_exec($curl);
if ($result) print_r($result);
die;
}
// Setjum villuboð
public function setError($msg = 'Óþekkt villa') {
$this->error = $msg;
return false;
}
// Setjum réttan haus fyrir rss feed
public function setHeader() {
header("Content-Type: application/rss+xml");
echo <<<END
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE torrent PUBLIC "-//bitTorrent//DTD torrent 0.1//EN" "http://xmlns.ezrss.it/0.1/dtd/">
END;
}
// Sýnum rss feed
public function showRss($page_id = null) {
if (!$this->getTorrents($page_id)) return $this->showRssError();
$page = $this->pagelist[$page_id];
$filelist = $this->filelist[$page_id];
$feedurl = getFeedurl();
$this->setHeader();
echo <<<END
<rss version="2.0">
<channel>
<title>$page->title</title>
<ttl>15</ttl>
<link>$feedurl</link>
<pubDate>$page->pubDate</pubDate>
END;
foreach ($filelist as $tf) {
echo <<<END
<item>
<title>$tf->title</title>
<link><![CDATA[$tf->url]]></link>
<pubDate>$tf->pubDate</pubDate>
<torrent xmlns="http://xmlns.ezrss.it/0.1/">
<fileName><![CDATA[$tf->url]]></fileName>
</torrent>
</item>
END;
}
echo <<<END
</channel>
</rss>
END;
die;
}
// Ef eitthvað fer úrskeðis prentum við út rss með villu, villan sést samt bara ef feed er opnað í browser
public function showRssError() {
$msg = ($this->error ? $this->error : 'Unknown error');
$this->setHeader();
echo <<<END
<rss version="2.0">
<channel>
<title>RSS Feed Error</title>
<description>Error: $msg</description>
</channel>
</rss>
END;
die;
}
}
?>
Til að nota þennan kóða er gert eftirfarandi:
1. Afritaðu kóðan og vistaðu sem rss.php
2. Farðu efst í skránna og settu inn það notandanafn og lykilorð sem þú notar á þeirri torrent síðu sem þú ætlar að nota, einfaldast að breyta gildunum í $def_user og $def_pass
3. Settu skránna svo inná vefþjón sem styður PHP, þægilegast að hafa vefþjón í gangi á tölvunni sjálfri eins og t.d. Apache
Ef þú vilt ekki þurfa að setja vefþjón upp á tölvunni þinni eða bara kannt það ekki þá er líka hægt að setja skránna inná fría hýsingu eins og t.d. 000webhost.com.
Svo þarf að setja þetta upp í torrent forriti, tek hér sem dæmi uTorrent en það ætti að vera eitthvað svipað ferli í öðrum torrent forritum.
1. Þú opnar uTorrent og smellir á File og velur svo þar "Add RSS Feed...", getur líka hægri smellt á Feeds í dálkinum vinstra megin og valið það sama þar
2. Í reitinn "Feed URL" seturu slóðina á rss.php skránna ásamt page_id sem segir til um hvaða torrent síðu á að ná í frá, hafðu svo rest eins og myndin sýnir
Ef skráin er á vefþjón á tölvunni sjálfri þá er slóðin http://localhost/rss.php?page_id=deildu annars þarftu að finna út hvað slóðin er á vefþjóninum sem þú ert að nota. Ef þú bætir engu við slóðina eftir page_id þá koma slóðir á allar torrent skrár sem þú sérð venjulega þegar þú skoðar á torrent síðunni sjálfri en til að fá ákveðna flokka þá bætiru við cat=1-15. Hér er listi til að einfalda þetta:
1. Annað
2. Íþróttir
3. Mac
4. XXX(18+)
5. DVD-R
6. Kvikmyndir
7. Teiknimyndir
8. Þættir
9. Heimildaefni
10. Leikir
11. Tónlist
12. Hi-Def
14. Windows
15. Anime
Þannig að til að fá t.d. þætti þá myndiru hafa slóðina rss.php?page_id=deildu&cat=8. Þegar þetta hefur allt verið gert ættiru núna að geta séð lista yfir þau torrent sem þú hefur áhuga á þegar þú smellir á Deildu undir Feeds í uTorrent.
Ef allt hefur verið gert rétt geturu núna farið að nota þetta, þú getur einfaldlega tvísmellt á torrent sem þú vilt sækja í listanum sem birtist hægra meginn í uTorrent.
SJÁLFVIRKT NIÐURHAL
Í torrent forritum eins og uTorrent er hægt að stilla þannig að forritið fylgist með RSS feedinu og nær sjálfkrafa í það sem maður vill. Til að fræðast betur um það mæli ég með að skoða leiðbeiningar á uTorrent.com.
ATHUGIÐ!
Bara svo það sé á hreinu, þá ber ég enga ábyrgð á því hvernig þetta er notað
ANNAÐ
Fyrir þá sem bíða eflaust mjög spenntir eftir næstu útgáfu af IceNet Monitor þá hef ég bara verið alltof upptekinn síðustu mánuði til þess að vinna í því en ég mun reyna að koma útgáfu 2.0 út fyrir lok sumars. Svo er von á fyrstu útgáfu Vaktar tólsins á sama tíma (og kannski líka fyrir Mac)