Автор Тема: Скрипт за сваляне на списък с непрочетени теми от SMF форум (като линукс-бг)  (Прочетена 6576 пъти)

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Имам една малка забележка към скрипта, който иначе си е ОК за мен - ползваш in_array(), което би моглo да се замести доста по-ефективно с асоциативни масиви:

Код
GeSHi (PHP):
  1.  
  2. $href = $hrefs->item($i);
  3. $url = $href->getAttribute('href');
  4. $title = $href->nodeValue;
  5.  
  6. if(preg_match('/\.0;topicseen$/',$url))
  7. {
  8. if(isset($links[$url])) continue;
  9. $links[$url] = $title;
  10. }

Така и двата масива, които генерираш се предават с един масив при това с релацията помежду им.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

PhrozenCrew

  • Напреднали
  • *****
  • Публикации: 51
    • Профил
Активен

kennedy

  • Напреднали
  • *****
  • Публикации: 2151
  • Николай Колев
    • Профил
добавям и кода за генериране на rss

Код
GeSHi (PHP):
  1. echo '<?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
  3. <rss version="0.91">
  4. <channel>
  5. <title>Linux за българи: Форум</title>';
  6.  
  7. foreach($links as $key=>$val){
  8. echo "<item><title>".$titles[$key]."</title><link>".$val."</link></item>\r\n";
  9. }
  10.  
  11. echo " </channel>
  12.  
  13. </rss>";
  14. ?>
« Последна редакция: Aug 21, 2011, 23:56 от VladSun »
Активен

"за всичко иде час" Еклесиаст 3:1
всеки пост - отговор на въпрос
-----------------
24.12.2003 "MS Free"

kennedy

  • Напреднали
  • *****
  • Публикации: 2151
  • Николай Колев
    • Профил
ъъъъ всъщност след забележката на Влад, трябва ли нещо да променям в кога за генерация?
Активен

"за всичко иде час" Еклесиаст 3:1
всеки пост - отговор на въпрос
-----------------
24.12.2003 "MS Free"

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
ъъъъ всъщност след забележката на Влад, трябва ли нещо да променям в кога за генерация?

Предполагам, че трябва да стане нещо от сорта на:

Код
GeSHi (PHP):
  1. <?php
  2. echo '<?xml version="1.0" encoding="utf-8"?>
  3. <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
  4. <rss version="0.91">
  5. <channel>
  6. <title>Linux за българи: Форум</title>';
  7.  
  8. foreach($links as $url => $title){
  9. echo "<item><title>".$title."</title><link>".$url."</link></item>\r\n";
  10. }
  11.  
  12. echo " </channel>
  13.  
  14. </rss>";
  15. ?>
« Последна редакция: Aug 21, 2011, 23:59 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

kennedy

  • Напреднали
  • *****
  • Публикации: 2151
  • Николай Колев
    • Профил
а ей това заклинание
Цитат
    if(preg_match('/\.0;topicseen$/',$url))
как трябва да се промени да хване последната страница на темата?
Активен

"за всичко иде час" Еклесиаст 3:1
всеки пост - отговор на въпрос
-----------------
24.12.2003 "MS Free"

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Малко не толковa PHP :)

rss.xsl
Код
GeSHi (XML):
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3.  
  4. <xsl:output
  5. method="xml"
  6. omit-xml-declaration="no"
  7. doctype-public="//Netscape Communications//DTD RSS 0.91//EN"
  8. doctype-system="http://my.netscape.com/publish/formats/rss-0.91.dtd"
  9. indent="yes"
  10. />
  11.  
  12. <xsl:template match="/">
  13. <rss>
  14. <channel>
  15. <title>Linux за българи: Форум</title>
  16. <xsl:apply-templates select="/html/body//table/tr/td/table/tr[position() > 1]/td[position() = 3]/a[position() = 1]"/>
  17. </channel>
  18. </rss>
  19. </xsl:template>
  20.  
  21. <xsl:template match="a">
  22. <item>
  23. <title><xsl:value-of select="." /></title>
  24. <link><xsl:value-of select="../span/a[last()-1]/@href" /></link>
  25. </item>
  26. </xsl:template>
  27. </xsl:stylesheet>
  28.  

Код
GeSHi (PHP):
  1. ...
  2. $html = curl_get_links();
  3.  
  4. $dom = new DOMDocument();
  5. @$dom->loadHTML($html);
  6.  
  7. $xslDoc = new DOMDocument();
  8. $xslDoc->load("rss.xsl");
  9.  
  10. $proc = new XSLTProcessor();
  11. $proc->importStylesheet($xslDoc);
  12.  
  13. echo $proc->transformToXML($dom);
  14.  
« Последна редакция: Aug 23, 2011, 22:25 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

kennedy

  • Напреднали
  • *****
  • Публикации: 2151
  • Николай Колев
    • Профил
тц, не става така, нещо се гелпи.


а ей това заклинание
Цитат
    if(preg_match('/\.0;topicseen$/',$url))
как трябва да се промени да хване последната страница на темата?
Активен

"за всичко иде час" Еклесиаст 3:1
всеки пост - отговор на въпрос
-----------------
24.12.2003 "MS Free"

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Кое, какво не става?

Не е точно, последната страница а последното менение:
Код
GeSHi (PHP):
  1. if(preg_match('/topic=\d+\.msg\d+;topicseen#new$/',$url))
  2.  
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Намерих си един  бъг в XSLT-файла - при една страница, няма пейджър и дава празен линк.
Поправено:

Код
GeSHi (XML):
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3.  
  4. <xsl:output
  5. method="xml"
  6. omit-xml-declaration="no"
  7. doctype-public="//Netscape Communications//DTD RSS 0.91//EN"
  8. doctype-system="http://my.netscape.com/publish/formats/rss-0.91.dtd"
  9. indent="yes"
  10. />
  11.  
  12. <xsl:template match="/">
  13. <rss>
  14. <channel>
  15. <title>Linux за българи: Форум</title>
  16. <xsl:apply-templates select="/html/body//table/tr/td/table/tr[position() > 1]/td[position()=3]/a[position()=1]"/>
  17. </channel>
  18. </rss>
  19. </xsl:template>
  20.  
  21. <xsl:template match="a">
  22. <item>
  23. <title><xsl:value-of select="." /></title>
  24. <link>
  25. <xsl:choose>
  26.  
  27. <xsl:when test="../span/a[last()-1]/@href">
  28. <xsl:value-of select="../span/a[last()-1]/@href" />
  29. </xsl:when>
  30.  
  31. <xsl:otherwise>
  32. <xsl:value-of select="./@href" />
  33. </xsl:otherwise>
  34.  
  35. </xsl:choose>
  36. </link>
  37. </item>
  38. </xsl:template>
  39. </xsl:stylesheet>
  40.  

Код
GeSHi (PHP):
  1. <?php
  2.  
  3. function getContent()
  4. {
  5. $ch = curl_init();
  6.  
  7. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=login2');
  8. curl_setopt ($ch, CURLOPT_POST, 1);
  9. curl_setopt ($ch, CURLOPT_POSTFIELDS, 'user=USERNAME&passwrd=PASSWORD');
  10. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  11. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  12. $store = curl_exec ($ch);
  13. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=unreadreplies');
  14. $content = curl_exec ($ch);
  15. curl_close ($ch);
  16.  
  17. return $content;
  18. }
  19.  
  20. $html = getContent();
  21.  
  22. $dom = new DOMDocument();
  23. @$dom->loadHTML($html);
  24.  
  25. $xslDoc = new DOMDocument();
  26. $xslDoc->load("rss.xsl");
  27.  
  28. $proc = new XSLTProcessor();
  29. $proc->importStylesheet($xslDoc);
  30.  
  31. header("Content-type: application/rss+xml; encoding=utf-8");
  32. echo $proc->transformToXML($dom);
« Последна редакция: Aug 24, 2011, 13:00 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

kennedy

  • Напреднали
  • *****
  • Публикации: 2151
  • Николай Колев
    • Профил
Кое, какво не става?

Не е точно, последната страница а последното менение:
Код
GeSHi (PHP):
  1. if(preg_match('/topic=\d+\.msg\d+;topicseen#new$/',$url))
  2.  

това вади последните теми във форума .
Активен

"за всичко иде час" Еклесиаст 3:1
всеки пост - отговор на въпрос
-----------------
24.12.2003 "MS Free"

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Кое, какво не става?

Не е точно, последната страница а последното менение:
Код
GeSHi (PHP):
  1. if(preg_match('/topic=\d+\.msg\d+;topicseen#new$/',$url))
  2.  

?

T.e.?

http://www.linux-bg.org/forum/index.php?topic=41443.msg230753;topicseen#new ми вади тази страница с последият пост - "бившия" , де :)

това вади последните теми във форума .

Порблемът е, че не взима заглавието тъй като е друг линк :)
Може да се вземе лесно,обаче :)


Код
GeSHi (PHP):
  1. for ($i = 0; $i < $hrefs->length; $i++)
  2. {
  3.    $url = $hrefs->item($i)->getAttribute('href');
  4.    $title = $hrefs->item($i - 1)->nodeValue;
  5.  
  6. if(preg_match('/topic=\d+\.msg\d+;topicseen#new$/',$url))
  7. {
  8. if(!isset($links[$url]))
  9. {
  10. $links[$url] = $title;
  11. }
  12. }
  13. }
  14.  
« Последна редакция: Aug 24, 2011, 15:07 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

kennedy

  • Напреднали
  • *****
  • Публикации: 2151
  • Николай Колев
    • Профил
стана !
сега отива на последното мнение :)
Активен

"за всичко иде час" Еклесиаст 3:1
всеки пост - отговор на въпрос
-----------------
24.12.2003 "MS Free"