Форум by ArjLover

Форум by ArjLover (http://forum.arjlover.net/index.php)
-   Приёмная ArjLover-a (http://forum.arjlover.net/forumdisplay.php?f=3)
-   -   RSS (http://forum.arjlover.net/showthread.php?t=5040)

ArjLover 22.03.2008 01:19

RSS
 
Делаем заново. Кто обладает знаниями (в отличии от меня) по данной технологии прошу высказываться - что и как делать. Сейчас все в базе, с RSS должно быть полегче.

Updated:
С технологией разобрались. теперь нужны ваши пожелания по оформлению - что хотите видеть?
разные подписки на разные разделы или одну? какую информацию вставлять? побольше или поменьше? с картинками или без?

Shurik 22.03.2008 02:27

Немного переделав запросы к базе и всякую другую мелочёвку, можно получить то, что надо. Взято с одного трекера:
Код:

<?
# ---------- config variables ----------------------------
$S_header = "Content-Type: application/xml; charset=windows-1251" ;

$ch_name = "тут было название трекера" ;
$ch_link = "http://тут был урл трекера/" ;

$mysql_user = "тут был логин" ;
$mysql_pass = "тут был пароль" ;
$mysql_db = "тут было имя базы" ;

$images_dir = "тут был путь к картинкам" ;
$web_images_dir = "http://тут был урл трекера/descimages" ;

include("../include/global.php");
# ------------------------------------------- routines --
function RowSet ( $r ) {
$o_link = "http://тут был урл трекера/details.php?id=".$r['id'] ;
$o_desc = $r['descr'];
#$o_desc = substr ( $o_desc, 0 , 80 ) ;
$o_desc = str_replace ( "&", "and", $o_desc ) ;
$o_desc = convert_cyr_string ( $o_desc, "k", "w" ) ;
$o_desc = format_comment($o_desc);
$o_desc = str_replace ( "&nbsp;", " ", $o_desc ) ;
global $images_dir, $web_images_dir;
$image = "";
if (file_exists($images_dir."/1/".$r["id"].".gif")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".gif\" align=\"left\" border=\"0\" />";
if (file_exists($images_dir."/1/".$r["id"].".jpg")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".jpg\" align=\"left\" border=\"0\" />";
if (file_exists($images_dir."/1/".$r["id"].".png")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".png\" align=\"left\" border=\"0\" />";
$o_desc = "<table width=\"100%\"><tr><td>" . $image . "</td></tr></table>" . $o_desc;
$o_name = str_replace ( "&", "&amp;", $r['name'] ) ;
$o_desc = str_replace ( "<", "&lt;", $o_desc );
$o_desc = str_replace ( ">", "&gt;", $o_desc );
$o_time = date ("D, d M Y H:i:s", strtotime ( $r['added'])) ;
$o_name = convert_cyr_string ( $o_name, "k", "w" ) ;
$outp = "<item>
      <title>".$o_name."</title>
      <link>".$o_link."</link>
      <description>".$o_desc."</description>
      <pubDate>".$o_time." +0300</pubDate>
      <guid>".$o_link."</guid>
    </item>" ;
return $outp ;
}

function PrintErrXml () {
global $ch_name, $ch_link ;
$ch_time = date ("D, d M Y H:i:s") ;
$output = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>
<rss version=\"2.0\">
<channel>
<title>$ch_name</title>
<link>$ch_link</link>
<description>The New Ten Torrents</description>
<language>ru</language>
<pubDate>$ch_time +0300</pubDate>
<lastBuildDate>$ch_time +0300</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>GenericRSS 0.1</generator>
<managingEditor>local@qwerty.ru</managingEditor>
<webMaster>local@qwerty.ru</webMaster>
<item>
<title>Error.</title>
 <link>http://qwerty.ru</link>
 <description>вЕЦН-РН МЕ ЯНЕДХМХРЭЯЪ Я АЮГНИ.</description>
      <pubDate>".$ch_time." +0300</pubDate>
    </item>
</channel>
</rss>" ;
 print $output ;
 exit;
}

function ReadOldTime () {
$fp = fopen ("./dynamic/011var", "r" );
$times = fread ( $fp, 128 ) ;
fclose ( $fp ) ;
$times = str_replace ( "\n", "", $times );
$times = (integer)$times ;
$sec = time() - $times ;
return $sec ;
}

# -------------------------------------------main code----
header ( $S_header ) ;

$sec = ReadOldTime () ;
if ( $sec < 600 )
{
include ("./dynamic/ready2.php") ;
}
else
{
$ch_time = date ("D, d M Y H:i:s") ;
$output = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>
<rss version=\"2.0\">
<channel>
<title>$ch_name</title>
<link>$ch_link</link>
<description>The New 20 Torrents</description>
<language>ru</language>
<pubDate>$ch_time +0300</pubDate>
<lastBuildDate>$ch_time +0300</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>GenericRSS 0.1</generator>
<managingEditor>nobody@nowhere.ru</managingEditor>
<webMaster>nobody@nowhere.ru</webMaster>" ;

$link = @mysql_connect("localhost", $mysql_user, $mysql_pass) or PrintErrXml() ;
@mysql_select_db($mysql_db) or PrintErrXml() ;
@mysql_query("SET NAMES koi8r");
$q = "SELECT id, name, descr, added, seeders FROM torrents WHERE level=0 ORDER BY otime DESC,id DESC LIMIT 20" ;
$qr = mysql_query( $q ) or die ("Error: Query execution failed");

while ($r = mysql_fetch_assoc ( $qr )) {
$output.= RowSet ( $r ) ;
} //while
$output.="</channel>
</rss>" ;

$output2 = addslashes ( $output ) ;
$output2 = "<?php print (\"".$output2."\"); ?>" ;
$fp = fopen ("./dynamic/ready2.php","w+") ;
fwrite ( $fp, $output2) ;
fclose ( $fp ) ;

$fp = fopen ("./dynamic/011var", "w+" );
fwrite ( $fp, time() ) ;
fclose ( $fp );

print $output ;
}
?>


ArjLover 22.03.2008 13:56

Shurik, спасибо конечно, но это не совсем от что хотелось бы. я не собираюсь анонсировать торренты. Хотя в анонсе новых пополнений наверно стоит публиковать все типы линков. Может еще новости с главной? или какие-то срочные технические объявления? А можно пускать несколько подвидов чтобы они не смешивались?

Shurik 22.03.2008 22:40

ArjLover, анонсировать торренты не нужно :) ссылки на торренты меняем на ссылки на информацию по видеофайлам и всё :)

Esn 26.03.2008 05:14

А нельзя это сделать так как это делают здесь:
http://mults.spb.ru/rss.php

Это ОЧЕНЬ удобно...

(RSS устанавливается на Mozilla Thunderbird)

ArjLover 26.03.2008 14:38

Дожили. :rolleyes: Но по линку совсем непонятно как это сделано и работает. Я совсем не пользуюсь RSS в своей жизни. :(

RUSpectrum 27.03.2008 13:45

ArjLover, ссылку, указанную Esn, нужно посмотреть с помощью пункта контекстного меню броузера "Просмотр исходного кода страницы".

RSS - это разновидность языка XML.
RSS в Википедии.
(есть пример RSS 2.0 канала)
Оттуда взял вот эту ссылку:
Спецификация RSS 2.0 (хм... она на русском)
Есть примеры и главное - описание тэгов согласно международной спецификации.

Shurik привел пример PHP-кода (если я правильно понял).
К сожалению я не PHP-ишник (я "а-ля Mircosoft Windows"), хотя предложенный код вполне правильный.

Кстати, RSS поддерживается не только Mozilla Thunderbird, но и многими броузерами.
У меня Mozilla Firefox - всё прекрасно работает.

Не удивлюсь, что в форумном PHP-движке уже заложен код формирования RSS-новостей.
На каком-то форуме видел, была новостная ветка "прикрученная" к RSS-новостям.

P.S. - Если честно, то не понял в чем собственно проблема... :confused:

ArjLover 27.03.2008 13:53

Проблема в дизайне этого произведения. Как можно заметить у меня-то c html не особо, а уж все это заворачивать в RSS/XML.. и самое главное - я всегда прошу помощь в идеях, самому придумывать некогда, да и не качаю я сам :) не знаю что для этого нужно :)

RUSpectrum 27.03.2008 14:17

Цитата:

Сообщение от ArjLover (Сообщение 38908)
Проблема в дизайне этого произведения...

"Внешнего" дизайна у RSS просто не существует - это зависит только от самих программ (на стороне пользователя), умеющих работать с RSS-новостями.
т.е. PHP-скрипт не формирует HTML-страницу для RSS-канала.

Если я правильно понимаю, то проблема во "внутреннем" дизайне, т.е RSS (XML) коде?

RUSpectrum 27.03.2008 16:37

Цитата:

Сообщение от Shurik (Сообщение 38341)
Код:

<?
# ---------- config variables ----------------------------
$S_header = "Content-Type: application/xml; charset=windows-1251" ;

$ch_name = "тут было название трекера" ;
$ch_link = "http://тут был урл трекера/" ;

$mysql_user = "тут был логин" ;
$mysql_pass = "тут был пароль" ;
$mysql_db = "тут было имя базы" ;

$images_dir = "тут был путь к картинкам" ;
$web_images_dir = "http://тут был урл трекера/descimages" ;

include("../include/global.php");
# ------------------------------------------- routines --
function RowSet ( $r ) {
$o_link = "http://тут был урл трекера/details.php?id=".$r['id'] ;
$o_desc = $r['descr'];
#$o_desc = substr ( $o_desc, 0 , 80 ) ;
$o_desc = str_replace ( "&", "and", $o_desc ) ;
$o_desc = convert_cyr_string ( $o_desc, "k", "w" ) ;
$o_desc = format_comment($o_desc);
$o_desc = str_replace ( "&nbsp;", " ", $o_desc ) ;
global $images_dir, $web_images_dir;
$image = "";
if (file_exists($images_dir."/1/".$r["id"].".gif")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".gif\" align=\"left\" border=\"0\" />";
if (file_exists($images_dir."/1/".$r["id"].".jpg")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".jpg\" align=\"left\" border=\"0\" />";
if (file_exists($images_dir."/1/".$r["id"].".png")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".png\" align=\"left\" border=\"0\" />";
$o_desc = "<table width=\"100%\"><tr><td>" . $image . "</td></tr></table>" . $o_desc;
$o_name = str_replace ( "&", "&amp;", $r['name'] ) ;
$o_desc = str_replace ( "<", "&lt;", $o_desc );
$o_desc = str_replace ( ">", "&gt;", $o_desc );
$o_time = date ("D, d M Y H:i:s", strtotime ( $r['added'])) ;
$o_name = convert_cyr_string ( $o_name, "k", "w" ) ;
$outp = "<item>
      <title>".$o_name."</title>
      <link>".$o_link."</link>
      <description>".$o_desc."</description>
      <pubDate>".$o_time." +0300</pubDate>
      <guid>".$o_link."</guid>
    </item>" ;
return $outp ;
}

function PrintErrXml () {
global $ch_name, $ch_link ;
$ch_time = date ("D, d M Y H:i:s") ;
$output = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>
<rss version=\"2.0\">
<channel>
<title>$ch_name</title>
<link>$ch_link</link>
<description>The New Ten Torrents</description>
<language>ru</language>
<pubDate>$ch_time +0300</pubDate>
<lastBuildDate>$ch_time +0300</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>GenericRSS 0.1</generator>
<managingEditor>local@qwerty.ru</managingEditor>
<webMaster>local@qwerty.ru</webMaster>
<item>
<title>Error.</title>
 <link>http://qwerty.ru</link>
 <description>вЕЦН-РН МЕ ЯНЕДХМХРЭЯЪ Я АЮГНИ.</description>
      <pubDate>".$ch_time." +0300</pubDate>
    </item>
</channel>
</rss>" ;
 print $output ;
 exit;
}

function ReadOldTime () {
$fp = fopen ("./dynamic/011var", "r" );
$times = fread ( $fp, 128 ) ;
fclose ( $fp ) ;
$times = str_replace ( "\n", "", $times );
$times = (integer)$times ;
$sec = time() - $times ;
return $sec ;
}

# -------------------------------------------main code----
header ( $S_header ) ;

$sec = ReadOldTime () ;
if ( $sec < 600 )
{
include ("./dynamic/ready2.php") ;
}
else
{
$ch_time = date ("D, d M Y H:i:s") ;
$output = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>
<rss version=\"2.0\">
<channel>
<title>$ch_name</title>
<link>$ch_link</link>
<description>The New 20 Torrents</description>
<language>ru</language>
<pubDate>$ch_time +0300</pubDate>
<lastBuildDate>$ch_time +0300</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>GenericRSS 0.1</generator>
<managingEditor>nobody@nowhere.ru</managingEditor>
<webMaster>nobody@nowhere.ru</webMaster>" ;

$link = @mysql_connect("localhost", $mysql_user, $mysql_pass) or PrintErrXml() ;
@mysql_select_db($mysql_db) or PrintErrXml() ;
@mysql_query("SET NAMES koi8r");
$q = "SELECT id, name, descr, added, seeders FROM torrents WHERE level=0 ORDER BY otime DESC,id DESC LIMIT 20" ;
$qr = mysql_query( $q ) or die ("Error: Query execution failed");

while ($r = mysql_fetch_assoc ( $qr )) {
$output.= RowSet ( $r ) ;
} //while
$output.="</channel>
</rss>" ;

$output2 = addslashes ( $output ) ;
$output2 = "<?php print (\"".$output2."\"); ?>" ;
$fp = fopen ("./dynamic/ready2.php","w+") ;
fwrite ( $fp, $output2) ;
fclose ( $fp ) ;

$fp = fopen ("./dynamic/011var", "w+" );
fwrite ( $fp, time() ) ;
fclose ( $fp );

print $output ;
}
?>


В коде выделил цветом нестыковки.
Это переделка с кодировки koi8r.
Кроме того должно быть соответствие "LIMIT 20" (прокрутите текст кода вправо) с содержимым "description" (10 или 20).
Вроде мелочь, но всё же...

Кстати, эти строки я бы записал в обратном порядке:
Код:

if (file_exists($images_dir."/1/".$r["id"].".png")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".png\" align=\"left\" border=\"0\" />";
else if (file_exists($images_dir."/1/".$r["id"].".jpg")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".jpg\" align=\"left\" border=\"0\" />";
else if (file_exists($images_dir."/1/".$r["id"].".gif")) $image = "<img src=\"".$web_images_dir."/1/".$r["id"].".gif\" align=\"left\" border=\"0\" />";


Pogonchik 27.03.2008 21:52

:o
Прошу извинить, если не в тему, но вот на моем uTorrent имеется такая кнопка, как RSS загрузчик. Никто не может разъяснить, как этим можно пользоваться, и вообще - нужно ли мне это?:confused:

RUSpectrum 27.03.2008 22:40

Pogonchik, я думаю, что было бы очень хорошо "прикрутить" RSS-канал и к uTorrent...
Как пользоваться? Ну я думую, что в RSS-подписке должен быть список новых торрентов на ArjLover. :confused:

ArjLover, я тут посмотрел "валидатором", так он ругается на "кривость" RSS :)
И даже СПб-шный (хоть и поменьше)
И посмотрите коллекцию значков RSS (на любой вкус и цвет ;) )

Shurik 28.03.2008 00:26

Цитата:

Сообщение от RUSpectrum (Сообщение 38921)
В коде выделил цветом нестыковки.
Это переделка с кодировки koi8r.

В коде совсем неслучайно присутствует convert_cyr_string...

ArjLover, дайте мне точку опоры, и я... структуру базы - напишу, как надо, ибо это совсем несложно...

RUSpectrum 28.03.2008 00:40

Shurik, я собственно говоря не понял к чему эта кодировка koi8r, если RSS формируется как windows-1251, а MySQL-база тоже windows-1251 ? :confused:

Shurik 28.03.2008 00:54

Ошибаешься, база там в koi8-r с очень давних времён (когда ещё set names koi8r не было в коде), а rss формируется в cp1251 с тех же самых времён. Все вопросы к тому, кто это писал.

RUSpectrum 28.03.2008 01:22

Shurik, тогда понятно... господи, какой кошмар :eek:

P.S. - Если честно, то сначала бы базу перегнать в windows-1251 :cool:

Esn 28.03.2008 02:03

Цитата:

Сообщение от ArjLover (Сообщение 38833)
Дожили. :rolleyes: Но по линку совсем непонятно как это сделано и работает. Я совсем не пользуюсь RSS в своей жизни. :(

Как это сделано не знаю, а выглядит это вот так:



Справа: RSS от сайта
Слева: другии RSS-feeds к которым я подписался

Shurik 28.03.2008 02:40

RUSpectrum, если я и буду перегонять базу, то только в UTF-8. А вместо convert_cyr_string можно просто делать сразу set names cp1251. Главное - задаться целью и сделать. Но там это далеко не самая главная задача, я только сегодня, например, обнаружил одну неприятную уязвимость, которая висела, можно сказать, "на виду", но её почти два года никто не замечал... что довольно странно...

RUSpectrum 28.03.2008 12:33

Esn, да не волнуйтесь Вы так!
Будет RSS!
И ни сколько не хуже! (хм... а возможно и лучше, т.к. база позволяет выводить более полную информацию)

Цитата:

Сообщение от Shurik (Сообщение 38972)
RUSpectrum, если я и буду перегонять базу, то только в UTF-8.

Shurik, разумеется это будет лучше. :cool:

Хотя я обычно делал немного подругому:
SQL-база в кодировке CP1251 (windows-1251),
а кодировку страниц (HTML, XML и т.д.) делал UTF-8.

Цитата:

Сообщение от Shurik (Сообщение 38972)
Главное - задаться целью и сделать.

Хех... Так задайтесь этой целью! :D
Про себя уже написал - ну не PHP-ишник я. :o

Кстати, смотрел PHP-спецификацию.
Там есть функции по работе с DOM, xmlwriter. Их разве нельзя сюда как-то "прикрутить" ?

ArjLover 28.03.2008 14:32

Спасибо, сейчас немного передохну от перестройки и надеюсь что справлюсь. :)


Часовой пояс GMT +3, время: 15:18.

vBulletin® Version 3.6.8.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot