Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[php] RSS parser voor 1 headline per feed

None
17 antwoorden
  • Ik ben al een tijdje op zoek voor een site, naar een php script (ik ben zelf nog vrij php-beginner, en het lijkt me nog te moelijk om aan een parser te beginnen), dat van een opgegeven RSS feed, maar één headline laat zien en linkt naar die site.
    De bedoeling is dat er in het navigatiemenu van de site van verschillende feeds één headline wordt getoont.

    Ik heb zowel op phphulp.nl en phpfreakz.nl rondgeneusd, en het enige script wat in de buurt kwam was dit, maar de hoofdfunctie mist nog: het weergeven van slechts één headline

    [code:1:eeb95e6766]
    <?php
    //define the source of the feed
    define(feed,'http://www.dailytech.com
    ss.aspx');
    /
    ecive file form server
    $xml_feed = file_get_contents(feed);
    //create a xml phraser
    $xml_praser = xml_parser_create();
    //tell the vars to the xml phrasers
    xml_parse_into_struct($xml_praser,$xml_feed,$xml_keys,$xml_index);
    //lets phrase ^^
    xml_parser_free($xml_praser);
    //generate the headlines
    for($i = 0;!empty($xml_index['TITLE'][$i]);$i++){
    if($i == 0){
    echo '<strong>Headlines van:<a href="'.$xml_keys[$xml_index['LINK'][$i]]['value'].'">'.$xml_keys[$xml_index['TITLE'][$i]]['value'].'
    </a></strong><br />';
    }else{

    echo '<a href="'.$xml_keys[$xml_index['LINK'][$i]]['value'].'">'.$xml_keys[$xml_index['TITLE'][$i]]['value'].
    '</a><br />';
    }
    }
    ?>
    [/code:1:eeb95e6766]

    Is dit script aan te passen dat het maar een item kan weergeven? Ik heb het nog niet kunnen vinden…

    Alvast bedankt!

    Carlo

  • Ik zie een for-loop. Lijkt mij dat je deze kan verwijderen en gewoon altijd het eerste item kan pakken (wel even controleren of deze bestaat).
  • hoe zou ik dat dan moeten doen? (ik weet nog heel weinig van php; als ik naar de code kijk snap ik vrij goed hoe hij inelkaar zit en wat hij doet, maar ik kan het nog niet echt zelf maken / bedenken)

    Bedankt weer!
  • [code:1:51fbb00a1a]
    <?php
    //define the source of the feed
    define(feed,'http://www.dailytech.com
    ss.aspx');
    /
    ecive file form server
    $xml_feed = file_get_contents(feed);
    //create a xml phraser
    $xml_praser = xml_parser_create();
    //tell the vars to the xml phrasers
    xml_parse_into_struct($xml_praser,$xml_feed,$xml_keys,$xml_index);
    //lets phrase ^^
    xml_parser_free($xml_praser);
    //generate the link
    // item 0: dailytech header
    // item 1: first news item
    if (!empty($xml_index['TITLE'][1]))
    {
    echo '<a href="', $xml_keys[$xml_index['LINK'][1]]['value'], '">', $xml_keys[$xml_index['TITLE'][1]]['value'], '</a>';
    }
    ?>
    [/code:1:51fbb00a1a]

  • werkt goed. Wat ik nu wil doen, is dat er maar een maximaal aantal tekens verschijnt, en dat de headline anders wordt afgekort met …

    Dit is wat ik bedoel:

    Oorspronkelijke tekst:
    Blablablablablabla

    Maximaal 10 tekens bijv.:
    Blablablab…

    Ergens op internet heb ik dit script gevonden en dat deed precies wat ik wil. Daarna heb ik het dus geprobeerd te combineren met het eerdergenoemde script voor die headlines, en dat werkte niet, want je krijgt dan dat een stuk php een ander stuk php echoed en dat gaat mis.
    Hier is het script:
    [code:1:f672b93b8e]
    <?

    function short($text, $max)
    {

    // is de text langer? dan het maximale?
    if (strlen($text) >= $max)
    {
    // maak van deze string een array
    $l = split(" ", $text);

    $tmp = "";
    // loop door de array heen
    foreach ($l as $key => $value)
    {
    // als de lengte niet groter is dan het maximale of kan worden, dan toevoegen anders…
    if (strlen($tmp) + strlen($value) < $max)
    {
    // voeg de text en spatie toe.
    $tmp .= $value . " ";
    }
    else
    {
    // haal 1 spatie weg van de string en plak er .. aanvast.
    $tmp = substr($tmp, 0, strlen($tmp) -1) . "..";

    // is $tmp alleen .. dan pak de eerste $max carakters
    if ($tmp == "..")
    {
    // geef deze waarden terug.
    return substr($text, 0, $max) . "..";
    }
    else
    {
    // geef deze waarden terug.
    return $tmp;
    }
    }
    }
    }
    else
    {
    // deze text is reeds lang genoeg dus kan je gelijk weer terug geven.
    return $text;
    }
    }
    ?>
    [/code:1:f672b93b8e]
    Het enige wat je hoeft te doen om korte tekst te krijgen is dit:
    [code:1:f672b93b8e]
    echo short("blablabla",20)
    [/code:1:f672b93b8e]
    die 20 staat voor het aantal tekens.

    Is er een manier om deze twee scripts (van de RSS headlines en van het afkorten) met elkaar te implementeren? Mij is het nog niet echt gelukt..
  • ik denk dat je zoiets wilt:
    echo '<a href="', $xml_keys[$xml_index['LINK'][1]]['value'], '">', short($xml_keys[$xml_index['TITLE'][1]]['value'], 50), '</a>';

    de functiedefinitie van short (die je hierboven hebt gepost) moet je dan wel ergens opnemen in je php file.
  • Dat heb ik dus al geprobeerd, helaas werkt het alleen niet. Als ik het op die manier doe, krijg ik alleen de puntjes (…) en niet de headline.
  • [code:1:40ee715b43]
    function short($text, $limit) {
    if ( strlen($text) > $limit ) {
    return substr($text, 0, $limit) . ' …';
    }
    else {
    return $text;
    }
    }
    echo short('blaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 20);
    [/code:1:40ee715b43]
    Bedoel je zoiets?
  • Lees even het topic goed, want dat is niet wat ik bedoel
    Het afkorten van de tekst gaat prima, maar ik moet de RSS headline afkorten, dus het script wat eerder ter sprake kwam.
  • [quote:51b8848052="carlobernardini"]Dat heb ik dus al geprobeerd, helaas werkt het alleen niet. Als ik het op die manier doe, krijg ik alleen de puntjes (…) en niet de headline.[/quote:51b8848052]
    dan is er ws iets mis met de short() functie. Test die eerst s uitgebreid.
  • De short() functie werkt prima. Het gaat dus ergens anders mis.
    Roep je de functie wel goed aan?
  • Dit is wat ik heb geprobeerd (maar ik heb het ook op heel veel andere manieren geprobeerd… :( )
    [code:1:9991026bbb]
    <?

    function short($text, $max)
    {

    // is de text langer? dan het maximale?
    if (strlen($text) >= $max)
    {
    // maak van deze string een array
    $l = split(" ", $text);

    $tmp = "";
    // loop door de array heen
    foreach ($l as $key => $value)
    {
    // als de lengte niet groter is dan het maximale of kan worden, dan toevoegen anders…
    if (strlen($tmp) + strlen($value) < $max)
    {
    // voeg de text en spatie toe.
    $tmp .= $value . " ";
    }
    else
    {
    // haal 1 spatie weg van de string en plak er .. aanvast.
    $tmp = substr($tmp, 0, strlen($tmp) -1) . "..";

    // is $tmp alleen .. dan pak de eerste $max carakters
    if ($tmp == "..")
    {
    // geef deze waarden terug.
    return substr($text, 0, $max) . "..";
    }
    else
    {
    // geef deze waarden terug.
    return $tmp;
    }
    }
    }
    }
    else
    {
    // deze text is reeds lang genoeg dus kan je gelijk weer terug geven.
    return $text;
    }
    }
    //define the source of the feed
    define(feed,'http://www.dailytech.com
    ss.aspx');
    /
    ecive file form server
    $xml_feed = file_get_contents(feed);
    //create a xml phraser
    $xml_praser = xml_parser_create();
    //tell the vars to the xml phrasers
    xml_parse_into_struct($xml_praser,$xml_feed,$xml_keys,$xml_index);
    //lets phrase ^^
    xml_parser_free($xml_praser);
    //generate the link
    // item 0: dailytech header
    // item 1: first news item
    if (!empty($xml_index['TITLE'][1]))
    {
    echo short('<a href="', $xml_keys[$xml_index['LINK'][1]]['value'], '">', $xml_keys[$xml_index['TITLE'][1]]['value'], '</a>',20);
    }
    ?>
    [/code:1:9991026bbb]

  • ja, maar volgens mij wil je dit ook helemaal niet, en je doet t dan nog fout ook. Je roept de functie short nu nl aan met de parameters '<a href=..t/m..[value]', dan '">' wat natuurlijk niet echt een integer is, en de andere parameters worden weggegooid.

    zet s ipv je laatste echo-statement het volgende neer:
    [code:1:2e82a81c2c]echo '<a href="', $xml_keys[$xml_index['LINK'][1]]['value'], '">' . short($xml_keys[$xml_index['TITLE'][1]]['value'], 20) . '</a>';[/code:1:2e82a81c2c]
    nu wordt de HTML output een link naar de link van de feed en met als tekst een gedeelte van de titel.

    Dus als t goed is:[code:1:2e82a81c2c]<a href="http://www.dailytech.com">This channel featur…</a>[/code:1:2e82a81c2c]
  • [quote:c9f7a2fa55="marientje"][code:1:c9f7a2fa55]echo '<a href="', $xml_keys[$xml_index['LINK'][1]]['value'], '">' . short($xml_keys[$xml_index['TITLE'][1]]['value'], 20) . '</a>';[/code:1:c9f7a2fa55][/quote:c9f7a2fa55][code:1:c9f7a2fa55]
    echo '<a href="' . $xml_keys[$xml_index['LINK'][1]]['value'] . '">' . short($xml_keys[$xml_index['TITLE'][1]]['value'], 20) . '</a>';[/code:1:c9f7a2fa55] ( , vervangen voor . )
  • [quote:a41f27daa9="marientje"]ja, maar volgens mij wil je dit ook helemaal niet, en je doet t dan nog fout ook. Je roept de functie short nu nl aan met de parameters '<a href=..t/m..[value]', dan '">' wat natuurlijk niet echt een integer is, en de andere parameters worden weggegooid.

    zet s ipv je laatste echo-statement het volgende neer:
    [code:1:a41f27daa9]echo '<a href="', $xml_keys[$xml_index['LINK'][1]]['value'], '">' . short($xml_keys[$xml_index['TITLE'][1]]['value'], 20) . '</a>';[/code:1:a41f27daa9]
    nu wordt de HTML output een link naar de link van de feed en met als tekst een gedeelte van de titel.

    Dus als t goed is:[code:1:a41f27daa9]<a href="http://www.dailytech.com">This channel featur…</a>[/code:1:a41f27daa9][/quote:a41f27daa9]

    Werkt nu perfect! Bedankt!
  • [quote:06b496b55f="_arno_"]( , vervangen voor . )[/quote:06b496b55f]
  • overigens was ik zelf niet helemaal consequent door de ene keer een , en de andere keer een . te gebruiken. (gebruik zelf altijd een . )

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.