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

kennedy

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

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

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Здравейте,
Търся скрипт с който мога да сваля списъка с непрочетените теми тук във форума и да си ги направя на RSS .
Някакви идеи за това как да стане?

Защо трябва да използваш скрипт? Аз карам директно с Liferea.
(http://www.linux-bg.org/forum/index.php?type=rss;action=.xml)
« Последна редакция: Aug 16, 2011, 20:00 от backtolife »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

kennedy

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

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

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
http://www.linux-bg.org/forum/index.php?action?board=72.0;sa=news;type=rss;action=.xml;u=[id]

Накрая ID го заменяш с твоето потребителското ID.

PS: пак не става... Моя грешка.

PS2: Оказва се, че самият RSS на форума не поддържа показване само на твоите теми. Дори и този за новините показва всички нови теми или теми в които е написан пост, без значение кой е автора.
« Последна редакция: Aug 17, 2011, 16:34 от backtolife »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

kennedy

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

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

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Ами гледах POST заявката и има идин hidden параметър: hash_passwrd, който се изпраща и до тука съм стигнал, ама спрях понеже имам друга работа. Иначе гледах man-а на wget и на curl, но и на мен ми се видя малко мътна работа.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

PhrozenCrew

  • Напреднали
  • *****
  • Публикации: 51
    • Профил
С wget  би трябвало да стане така (в момента няма как да го тествам):

wget -O - --save-cookies=cookies.txt --keep-session-cookies --auth-no-challenge --no-check-certificate --post-data "user=ПОТРЕБИТЕЛСКОТО_ИМЕ&passwrd=ПАРОЛАТА&hash_passwrd=" "http://www.linux-bg.org/forum/index.php?action=login2"

wget -O - --keep-session-cookies --load-cookies=cookies.txt "http://STRANICATA_KOIATO_TI_YTIABVA"

---------
Можеш да ползваш и някой автоматизатор за браузване в Web. Тук съм насъбрал няколко, можеш да си харесаш нещо по-лесно за работа: http://blog.nediko.info/web-mechanize-engines
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Да, при мен работи. Сега остава само парсъра.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

PhrozenCrew

  • Напреднали
  • *****
  • Публикации: 51
    • Профил
И с curl би трябвало да няма проблем. Примерно през конзолата би трябвало да е така:
Код:
curl --cookie cfile --cookie-jar cfile --data "user=ПОТРЕБИТЕЛСКОТО_ИМЕ" --data "passwrd=ПАРОЛАТА" --data "hash_passwrd=" --location "http://www.linux-bg.org/forum/index.php?action=login2"

curl --cookie cfile --output NIAKAKYV_FILE.html "http://www.linux-bg.org/STRANICATA"
Ако и това работи, ще е много лесно конзолната версия да се прехвърли към PHP (ако му е зареден cURL).
Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Ами гледах POST заявката и има идин hidden параметър: hash_passwrd, който се изпраща и до тука съм стигнал, ама спрях понеже имам друга работа. Иначе гледах man-а на wget и на curl, но и на мен ми се видя малко мътна работа.

Да, но функцията за хеширане на паролата работи само при наличието на sha1_hex() функцията (която при мен FireBug я дава undefined), иначе паролата се предава некодирана.

Всъщност са се погрижили да може да се влиза във форума и с браузери без JS :)
Активен

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

PhrozenCrew

  • Напреднали
  • *****
  • Публикации: 51
    • Профил
Еххх, най накрая съм с биричка на машина с конзола, с php и нефилтриран интернет  ;D
Ей един вариант, който ми дойде на акъла:
Код
GeSHi (PHP):
  1. <?php
  2. function curl_get_links(){
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=login2');
  5. curl_setopt ($ch, CURLOPT_POST, 1);
  6. curl_setopt ($ch, CURLOPT_POSTFIELDS, 'user=ПОТРЕБИТЕЛ&passwrd=ПАРОЛА');
  7. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  8. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  9. $store = curl_exec ($ch);
  10. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=unread');
  11. $content = curl_exec ($ch);
  12. curl_close ($ch);
  13.  
  14. return $content;
  15. }
  16.  
  17. // ############################# Извличане на всички линкове
  18.  
  19. $html = curl_get_links();
  20. $links = array();
  21.  
  22. $dom = new DOMDocument();
  23. @$dom->loadHTML($html);
  24.  
  25. $xpath = new DOMXPath($dom);
  26. $hrefs = $xpath->evaluate("/html/body//a");
  27.  
  28. for ($i = 0; $i < $hrefs->length; $i++) {
  29.    $href = $hrefs->item($i);
  30.    $url = $href->getAttribute('href');
  31. if(preg_match('/\.0;topicseen$/',$url)){
  32. if(in_array($url, $links)) continue;
  33. $links[] = $url;
  34. }
  35. }
  36. foreach($links as $l) echo $l."\r\n";
  37. ?>
Това може да се вкара в някакъв аплет за десктопа примерно.
« Последна редакция: Aug 19, 2011, 15:08 от VladSun »
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Код
GeSHi (PHP):
  1. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=unread');
Код
GeSHi (PHP):
  1. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=unreadreplies');

Tака трябва да е за отговори на теми в които си писал или си постнал.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

kennedy

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

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

kennedy

  • Напреднали
  • *****
  • Публикации: 2151
  • Николай Колев
    • Профил
Еххх, най накрая съм с биричка на машина с конзола, с php и нефилтриран интернет  ;D
Ей един вариант, който ми дойде на акъла:
Код
GeSHi (PHP):
  1. <?php
  2. function curl_get_links(){
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=login2');
  5. curl_setopt ($ch, CURLOPT_POST, 1);
  6. curl_setopt ($ch, CURLOPT_POSTFIELDS, 'user=ПОТРЕБИТЕЛ&passwrd=ПАРОЛА');
  7. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  8. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  9. $store = curl_exec ($ch);
  10. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=unread');
  11. $content = curl_exec ($ch);
  12. curl_close ($ch);
  13.  
  14. return $content;
  15. }
  16.  
  17. // ############################# Извличане на всички линкове
  18.  
  19. $html = curl_get_links();
  20. $links = array();
  21.  
  22. $dom = new DOMDocument();
  23. @$dom->loadHTML($html);
  24.  
  25. $xpath = new DOMXPath($dom);
  26. $hrefs = $xpath->evaluate("/html/body//a");
  27.  
  28. for ($i = 0; $i < $hrefs->length; $i++) {
  29.    $href = $hrefs->item($i);
  30.    $url = $href->getAttribute('href');
  31. if(preg_match('/\.0;topicseen$/',$url)){
  32. if(in_array($url, $links)) continue;
  33. $links[] = $url;
  34. }
  35. }
  36. foreach($links as $l) echo $l."\r\n";
  37. ?>
Това може да се вкара в някакъв аплет за десктопа примерно.

а с тази магия как може да се извлече заглавието на темата?
абсолютно неразбираемо ми е как успява даже да извади баш на темите линковете   ??? ???
Активен

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

PhrozenCrew

  • Напреднали
  • *****
  • Публикации: 51
    • Профил
Ако решиш да ползваш DOM-модела, който за подобни случки ми се струва най-лек (и може би най-бърз, заради печения парсер на PHP), тогава извличаш името на линка с nodeValue. Примерно:
$title = $href->nodeValue;
Ам по-добре да видим целия код.

Код
GeSHi (PHP):
  1. <?php
  2. function curl_get_links(){
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=login2');
  5. curl_setopt ($ch, CURLOPT_POST, 1);
  6. curl_setopt ($ch, CURLOPT_POSTFIELDS, 'user=ПОТРЕБИТЕЛ&passwrd=ПАРОЛА');
  7. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  8. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  9. $store = curl_exec ($ch);
  10. curl_setopt($ch, CURLOPT_URL, 'http://www.linux-bg.org/forum/index.php?action=unread');
  11. $content = curl_exec ($ch);
  12. curl_close ($ch);
  13.  
  14. return $content;
  15. }
  16.  
  17. // ############################# Извличане на всички линкове
  18.  
  19. $html = curl_get_links();
  20. $links = array();
  21.  
  22. $dom = new DOMDocument();
  23. @$dom->loadHTML($html);
  24.  
  25. $xpath = new DOMXPath($dom);
  26. $hrefs = $xpath->evaluate("/html/body//a");
  27.  
  28. for ($i = 0; $i < $hrefs->length; $i++) {
  29.    $href = $hrefs->item($i);
  30.    $url = $href->getAttribute('href');
  31.    $title = $href->nodeValue;
  32.  
  33. if(preg_match('/\.0;topicseen$/',$url)){
  34. if(in_array($url, $links)) continue;
  35. $links[] = $url;
  36. $titles[] = $title;
  37. }
  38. }
  39. foreach($links as $key=>$val){
  40. echo $val." - ".$titles[$key]."\r\n";
  41. }
  42. ?>

Малко е дървено потока да се разделя в 2 масива, но пък е по-лесно за четене. Единия масив  са ти линковете, а другия масив заглавията, така, че да могат лесно да се напасват за всякакви нужди.
« Последна редакция: Aug 21, 2011, 21:14 от VladSun »
Активен