RSS olvaso - ami a JobLine RSS csatornait olvassa

RSS olvaso - ami a JobLine RSS csatornait olvassa
2006-08-23T21:44:40+02:00
2006-08-29T08:08:08+02:00
2022-11-01T06:45:40+01:00
Pot
van ez a kod. innen szereztem. minden kiprobalt RSS csatornat olvas kiveve a Jobline-ét. nekem meg pont az kellene :(

tud valaki olyat ami olvassa a joblinet?

================================
<?php
/*
+--------------------------------------------------------------------------------+
| RSSReader
+--------------------------------------------------------------------------------+
|
| Description
| -> Reads a given RSS feed
|
| Features
| -> You can customize the initial opening tag by setting
| the $main_id var
| -> You can also customize which tags RSSReader will
| recognize as sub tags by adding tags to the $sub_keys
|
| Usage:
| $rss = new RSSReader("http://http://rss.news.yahoo.com/rss/topstories");
| $rss->Read();
| // For complete feed array:
| print_r($this->feed['array']);
| // For just the items:
| print_r($this->feed['items']);
|
| OR
|
| $rss = new RSSReader();
| print_r($rss->Read("http://rss.news.yahoo.com/rss/topstories"));
|
| Author: Matt Froese
| Contact: matt@spcan.com
| Version: 1.0
| Last Updated: July 14, 2005
|
+--------------------------------------------------------------------------------+
*/

$rss = new RSSReader();
print_r($rss->Read("http://rss.news.yahoo.com/rss/topstories"));


class RSSReader {

var $parser = '';
var $file = '';
var $current_tag = '';

var $main_id = 'CHANNEL';
var $sub_keys = array ('IMAGE', 'ITEM');

var $feed = array ( 'header' => '',
'items' => '' );

var $items = array();
var $data = array();
var $feed_data = array();

var $errors = array();

/*
+--------------------------------------------------------------------------------+
| RSSReader
+--------------------------------------------------------------------------------+
*/
function RSSReader( $file = '' ) {
$this->file = ( $file == "" ) ? "" : $file;
}

/*
+--------------------------------------------------------------------------------+
| Read
+--------------------------------------------------------------------------------+
*/
function Read( $file = '' ) {
$this->file = ( $file == "" ) ? $this->file : $file;
if( preg_match("/^http:\/\/([^\/]+)(.*)$/", $this->file, $matches) ) {

$host = $matches[1];
$uri = $matches[2];

$request = "GET " . $uri . " HTTP/1.0\r\n";
$request .= "Host: " . $host . "\r\n";
$request .= "Connection: close\r\n\r\n";

if( $http = fsockopen($host, 80, $errno, $errstr, 5) ) {
fwrite($http, $request);
$timeout = time() + 5;

$response = "";
while(time() < $timeout && !feof($http)) {
$response .= fgets($http, 4096);
}
list($header, $xml) = preg_split("/\r?\n\r?\n/", $response, 2);
if( preg_match("/^HTTP\/[0-9\.]+\s+(\d+)\s+/", $header, $matches) ){
$status = $matches[1];
if( $status == 200 ) {
$this->parser = xml_parser_create();
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, "startElement", "endElement");
xml_set_character_data_handler($this->parser, "characterData");
xml_parse($this->parser, trim($xml));
} else {
$this->errors[] = "Cannot retrieve feed: HTTP returned <b>" . $status . "</b>.";
}
} else {
$this->errors[] = "Cannot get status from header.";
}
} else {
$this->errors[] = "Cannot connect to <b>" . $host . "</b>.";
}
} else {
$this->errors[] = "Invalid file (" . $this->file . ").";
}
$this->feed['array'] = $this->feed_data;
$this->feed['items'] = $this->feed_data['ITEM'];
return $this->feed['array'];
}

/*
+--------------------------------------------------------------------------------+
| startElement
+--------------------------------------------------------------------------------+
*/
function startElement($parser, $name, $attrs) {
$this->current_tag = $name;

if( $this->current_tag == $this->main_id ) {
$this->inside_tag[ $this->main_id ] = true;
}
foreach( $this->sub_keys as $key ) {
if( $this->current_tag == $key ) {
$this->inside_tag[ $key ] = true;
break;
}
}
}

/*
+--------------------------------------------------------------------------------+
| characterData
+--------------------------------------------------------------------------------+
*/
function characterData($parser, $data) {
// skip if this element == ""
if( trim($data) != "" ) {
if( $this->inside_tag[ $this->main_id ] ) {
$done = false;
foreach( $this->sub_keys as $key ) {
if( isset($this->inside_tag[ $key ]) && $this->inside_tag[ $key ] == true ) {
if( isset($this->data[ $key ][ $this->current_tag ]) ) {
$this->data[ $key ][ $this->current_tag ] .= $data;
} else {
$this->data[ $key ][ $this->current_tag ] = $data;
}
$done = true;
break;
}
}
if( $done == false ) {
$this->feed_data[ $this->current_tag ] = $data;
}
}
}
}

/*
+--------------------------------------------------------------------------------+
| endElement
+--------------------------------------------------------------------------------+
*/
function endElement($parser, $name) {

foreach( $this->sub_keys as $key ) {
if( $name == $key ) {
$this->inside_tag[ $key ] = false;
$this->feed_data[ $key ][] = $this->data[ $key ];
$this->data[ $key ] = array();
break;
}
}
if( $name == $this->main_id ) {
$this->inside_tag[ $this->main_id ] = false;
}

$this->current_tag = "";
}
}


?>
Mutasd a teljes hozzászólást!

function tmp_xml($url,$tempfile) { $port = "80"; $url_comp = parse_url($url); $fp = fsockopen($url_comp['host'], $port); $request = "GET " . $url_comp['path'] . " HTTP/1.0\r\n"; $request .= " Host: " . $url_comp['host'] . "\r\n"; $request .="Content-type: text/plain\r\n"; $request .="User-Agent: Wazze5.0\r\n"; $request .= "\r\n"; fwrite($fp, $request); while ($tmp = fread($fp, 1024)) { $buffer .= $tmp; } preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts); $str=substr($buffer, - $parts[1]); $len=strlen($str); $f=fopen($tempfile,"w"); fwrite($f,$str,$len); fclose($f); }

Na elkészült!:)
Ez a függvény lehúzza az xml-t a tempfájlba

most ismerkedtem ám ezekkel a dolgokkal, ugyhogy hibát nem kezel, de ha pontosan megadsz mindent és jogod is írásra, akkor működ

az a lényeg hoyg meghívod ezt mielött az rss-t
tmp_xml($url,$tempfile)
ahol
- $url: amit átadnál az rssnézőkének, pl.: Hírek pályakezdőknek és tapasztalt munkavállalóknak
- $tempfile: egy előre létrehozott helyi fájl, pl.: temp.xml és a rss-nézőkének átadod a temp.xml -t

sok sikert, remélem menni fog

Mutasd a teljes hozzászólást!

  • ez meg egy tipikus stfw kérdés.
    Mutasd a teljes hozzászólást!
  • es mi az az"stfw kédés"?
    Mutasd a teljes hozzászólást!
  • STFW
    "Search The F
    u
    cking Web" - first seen on Usenet in 1996 (may also mean "so the f
    u
    ck what?")

    Tyrael
    Mutasd a teljes hozzászólást!
  • kosz. igazan hasznosak vagytok.
    Mutasd a teljes hozzászólást!
  • akkor tobb kerdesedre nem valaszolok.

    Tyrael
    Mutasd a teljes hozzászólást!
  • nem kell megsertodni. csak eleg gazok a semmitmondo valaszok.

    amugy azota mar legalabb 4 fele megoldast hasznaltam es mindegyik marha jol mukodik mindenhol kiveve a JOBLINE RSS csatornait.

    szoval fene tudja hogy mi lehet... egyre inkabb hajlok arra hogy a jobline szar.
    Mutasd a teljes hozzászólást!
  • Hibaüzenet nélkül, nem igazán lehet miből kiindulni...
    tipp: nem lehet hogy a bajod gyökere az hogy a jobline microsoft alapú (aspx) linkeket ad az xmlhez, a többi meg (amin működik) php-t? vagy teljesen hüleséget írtam?:)
    Mutasd a teljes hozzászólást!
  • hasonlóra gondoltam, csak egyszerűsítve

    A JobLine rosszul formázza az RSS-t és az olvasód nem tud vele mit kezdeni.. Próbáld validáltatni a csatornájukat

    RSS validálás (W3C)

    FeedValidator.org
    Mutasd a teljes hozzászólást!
  • nem irtal hulyeseget: aspx-es. de ez mit jelent az en szempontombol?

    a hibauzenet:
    Warning: fopen(Hírek pályakezdőknek és tapasztalt munkavállalóknak) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in rss.php on line 97
    could not open XML input
    Mutasd a teljes hozzászólást!
  • a szerveren nincs engedélyezve az fopen()?

    mi van a 97. sorban?
    Mutasd a teljes hozzászólást!
  • a 97. sor:
    if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
    }
    siman megnyitna olvasasra.
    Mutasd a teljes hozzászólást!
  • Az addig rendben is van hogy aspx-es, onnan vettem hogy meglestem, a hüleség abban lehet, hogy ez számít-e
    Mutasd a teljes hozzászólást!
  • úgy látom nem lehet gond a aspx,belelestem az egyikbe és az elejétől végéig xml
    de mint látom nem is a formátum a probléma
    Mutasd a teljes hozzászólást!
  • nem is a fentivel, hanem ezzel a koddal probalkozom. ez egy kicsit attekinthetobb, de az eredmeny ugyanaz :(
    ======================================

    <?php
    /*
    $newsfeed = 'http://jobline.hu/rss/780.aspx';

    $fp = @fopen($newsfeed, 'r');
    while(!feof($fp)){
    $row .= @fgets($fp, 4096);
    }
    @fclose($fp);

    if( eregi('<item>(.*)</item>', $row, $rowitem ) ) {
    $item = explode('<item>', $rowitem[0]);

    for( $i = 0; $i < count($item) - 1; $i++ ) {

    eregi('<title>(.*)</title>', $item[$i+1], $title );
    eregi('<link>(.*)</link>', $item[$i+1], $url );
    eregi('<description>(.*)</description>', $item[$i+1], $categorie);

    echo '<a href="' . $url[1] . '">' . $title[1] . '</a> -<br>' . $categorie[1] . '<br/>';

    }
    }

    */
    set_time_limit(0);
    $file = "http://jobline.hu/rss/780.aspx";
    $rss_channel = array();
    $currently_writing = "";
    $main = "";
    $item_counter = 7;

    function startElement($parser, $name, $attrs) {
    global $rss_channel, $currently_writing, $main;
    switch($name) {
    case "RSS":
    case "RDF:RDF":
    case "ITEMS":
    $currently_writing = "";
    break;
    case "CHANNEL":
    $main = "CHANNEL";
    break;
    case "IMAGE":
    $main = "IMAGE";
    $rss_channel["IMAGE"] = array();
    break;
    case "ITEM":
    $main = "ITEMS";
    break;
    default:
    $currently_writing = $name;
    break;
    }
    }

    function endElement($parser, $name) {
    global $rss_channel, $currently_writing, $item_counter;
    $currently_writing = "";
    if ($name == "ITEM") {
    $item_counter++;
    }
    }

    function characterData($parser, $data) {
    global $rss_channel, $currently_writing, $main, $item_counter;
    if ($currently_writing != "") {
    switch($main) {
    case "CHANNEL":
    if (isset($rss_channel[$currently_writing])) {
    $rss_channel[$currently_writing] .= $data;
    } else {
    $rss_channel[$currently_writing] = $data;
    }
    break;
    case "IMAGE":
    if (isset($rss_channel[$main][$currently_writing])) {
    $rss_channel[$main][$currently_writing] .= $data;
    } else {
    $rss_channel[$main][$currently_writing] = $data;
    }
    break;
    case "ITEMS":
    if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
    $rss_channel[$main][$item_counter][$currently_writing] .= $data;
    } else {
    $rss_channel[$main][$item_counter][$currently_writing] = $data;
    }
    break;
    }
    }
    }

    $xml_parser = xml_parser_create();
    xml_set_element_handler($xml_parser, "startElement", "endElement");
    xml_set_character_data_handler($xml_parser, "characterData");
    if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
    }

    while ($data=fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $data, feof($fp))) {
    die(sprintf("XML error: %s at line %d",
    xml_error_string(xml_get_error_code($xml_parser)),
    xml_get_current_line_number($xml_parser)));
    }
    }
    xml_parser_free($xml_parser);

    // output HTML
    if (isset($rss_channel["ITEMS"])){
    if (count($rss_channel["ITEMS"])>0){
    for($i=0; $i<count($rss_channel["ITEMS"]); $i++){
    if(isset($rss_channel["ITEMS"][$i]["LINK"])){
    print ("\n<a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\">" . $rss_channel["ITEMS"][$i]["TITLE"] . "</a>");
    } else {
    print ("\n" . $rss_channel["ITEMS"][$i]["TITLE"]);
    }//if
    print ($rss_channel["ITEMS"][$i]["DESCRIPTION"] . "<br>");
    }//for
    } else {
    print ("Nincs hír.");
    }//if
    }//if

    ?>
    Mutasd a teljes hozzászólást!
  • Csinálj egy ilyen phpt
    pl legyen xml_open.php

    <? $url=$_GET; echo "<body onLoad=\"window.location.href('$url')\">"; ?>

    aztán amikor a hírolvaso linket megadod, így írd az urlt
    xml_open.php?url=http://jobline.hu/rss/774.aspx
    nekem így megnyitja az xml-t
    hogy így miért jó és amugy miért nem, azt nem tudom

    Mutasd a teljes hozzászólást!
  • nalam ugyanolyan rossz :(
    Mutasd a teljes hozzászólást!
  • ua, a hibaüzenet?
    Mutasd a teljes hozzászólást!
  • igen. ugyanaz a hibauzenet.
    Mutasd a teljes hozzászólást!
  • Kísérletezem
    Csak közben meló
    Mutasd a teljes hozzászólást!
  • Egyszerűen nem megy
    fsockopennel próbálkoztam, mert arra gondoltam, hogy akkor olyan lesz mintha böngészőből nyitnám
    de nem...
    nem engedi meg a jobline, hogy távolról megnyissam php-ből

    Sztem nyiss egy új topicot, mert a probléma ez
    hátha lesz valaki aki tud rá megoldást

    áthidalni lehet
    ha letöldöd az fájlt (pl.:a 780.aspx-et) és helyileg nyitod meg a rss-kével
    csak ugyebár akkor csak kézzel lehet frissíteni (ftp server sem találtam a joblinenál, ahonnan esetleg automatikussá tudod tenni)
    esetleg az lehet hogy egy http letöltő programmal automatizálsz és onnan feltöltöd a webhelyedre ftp-vel vagy bármivel


    Mutasd a teljes hozzászólást!
  • fsockon keresztül mindent kitöltöttél?
    tehát user-agent meg minden ilyen finomságot?
    Mert ha igen, akkor biztos hogy nem tud megkülönböztetni egy böngészőtől..
    Mutasd a teljes hozzászólást!
  • Hát azatat nem:)
    Voltaképp ezt a fsockopen most használtam először
    Majd megismerkedek vele, úgy gondolom, nem lesz káromra:)
    Mutasd a teljes hozzászólást!
  • hát akkor tölts ki mindent, mert lehet hogy azért nem enged tölteni, mer el akarja kerülni az olyan eseteket mint amiet most akarsz csinálni
    Mutasd a teljes hozzászólást!

  • function tmp_xml($url,$tempfile) { $port = "80"; $url_comp = parse_url($url); $fp = fsockopen($url_comp['host'], $port); $request = "GET " . $url_comp['path'] . " HTTP/1.0\r\n"; $request .= " Host: " . $url_comp['host'] . "\r\n"; $request .="Content-type: text/plain\r\n"; $request .="User-Agent: Wazze5.0\r\n"; $request .= "\r\n"; fwrite($fp, $request); while ($tmp = fread($fp, 1024)) { $buffer .= $tmp; } preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts); $str=substr($buffer, - $parts[1]); $len=strlen($str); $f=fopen($tempfile,"w"); fwrite($f,$str,$len); fclose($f); }

    Na elkészült!:)
    Ez a függvény lehúzza az xml-t a tempfájlba

    most ismerkedtem ám ezekkel a dolgokkal, ugyhogy hibát nem kezel, de ha pontosan megadsz mindent és jogod is írásra, akkor működ

    az a lényeg hoyg meghívod ezt mielött az rss-t
    tmp_xml($url,$tempfile)
    ahol
    - $url: amit átadnál az rssnézőkének, pl.: Hírek pályakezdőknek és tapasztalt munkavállalóknak
    - $tempfile: egy előre létrehozott helyi fájl, pl.: temp.xml és a rss-nézőkének átadod a temp.xml -t

    sok sikert, remélem menni fog

    Mutasd a teljes hozzászólást!
  • Nem volt ám nehéz szülés, csak haza kellett jönnöm:)
    Mondjuk hozzátenném, hogy mindenféle részletekbe menő elmélyedés nélkül csináltam. Sok dolgot csak kikísérleteztem
    pl nem értem hogy miért nem megy http/1.1-en
    csak 1.0
    biztosan nem adok meg valami, vagy rosszul adom meg azt:)

    meg még valami,ez a chmod()...
    leírás szerint 1 végrehajtás, 2 írás, 4 olvasás, 1+2+4=7, full jog, 777, mindenkinek full jog, ha lefuttatom akkor elvesztem a jogot, ez a chmod csak unix alatt megy? mert így érthető lenne

    ezt a fájlkezelés dolgot nagyon meg kéne lesnem

    a másik, hogy (bár igaz hogy nem sokáig keresgéltem) nem találtam fájllétrehozó függvényt...

    Mutasd a teljes hozzászólást!
  • Bocsi hogy társalgót csinálok a topicodból, de ezek a kérdések kicsusszantak belőlem és ideestek...:)
    Mutasd a teljes hozzászólást!
  • tudomasom szerint a chmod csak linux/unix rendszereken megy.

    kiprobalom a megoldasod es ha hasznalhato tied az 50 potty :)
    Mutasd a teljes hozzászólást!
  • ennek utánalestem:) vagyis kipróba, lin alatt megy win meg nem tud vele mit kezdeni (aztán ingább el bbbbbba:)),minde...
    Viszont azt még továbbra sem értem h miért nem megy ha azt írom hogy http/1.1
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd