RSS Op de kop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs Vos

Matthijs Vos

14/07/2012 20:25:27
Quote Anchor link
Hallo Allemaal,

Ik draai op mijn server momenteel test met een systeem die p2000 meldingen (Brandweer,Politie,Ambulance) opslaat in een DB + verstuurt naar twitter. Het opslaan en uitlezen is de db is geen probleem omdat ik deze bij het uitlezen order. Het tweeten echter wel, op het moment dat er meerdere meldingen getweet word komt de nieuwste als eerst en de oudste als laatst (logisch want zo leest de foreach de rss uit). Nu wil ik echter dat de niewste als laatst komt en de oudste als eerst (dat ze dus in de goede volgorde staan) Is het mogelijk om het uitlezen van oud naar nieuw te laten gebeuren, of op een andere manier dit goed te laten tweeten?

Matthijs
 
PHP hulp

PHP hulp

27/04/2024 01:38:18
 
Wouter J

Wouter J

14/07/2012 20:33:31
Quote Anchor link
Ik weet niet hoe je ze uitleest, maar het lijkt me dat je een array krijgt met alle meldingen en dan kun je gewoon een array_reverse uitvoeren.
 
Matthijs Vos

Matthijs Vos

14/07/2012 20:40:40
Quote Anchor link
Nee, Ik krijg ze niet in een array ik doe hetvolgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?

$countbrw
= 0;
$brandweer = simpleXML_load_file('http://feeds.livep2000.nl/?r=25&d=1');
foreach ($brandweer->channel->item as $brandweer){
if($countbrw < 10){
$countbrw++;
$title_brandweer = $brandweer->title;
$dag_brandweer = date( 'l', strtotime( $brandweer->pubDate ) );
$datumdag_brandweer = date( 'd', strtotime( $brandweer->pubDate ) );
$maand_brandweer = date( 'm', strtotime( $brandweer->pubDate ) );
$jaar_brandweer = date( 'y', strtotime( $brandweer->pubDate ) );
$time_brandweer = date( 'H:i', strtotime( $brandweer->pubDate ) );
$description = $brandweer->description;
$namespaces_brw = $brandweer->getNameSpaces(true);
$geobrw = $brandweer->children($namespaces_brw['geo']);
$lat_brandweer =  $geobrw->lat;
$long_brandweer = $geobrw-> long;
?>

Dan worden er allemaal bewerkingen en checks uitgevoerd op de gegevens. En daarna word het opgeslagen in de db en getweet door het onderstaande

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$sql
= mysql_query("INSERT INTO xxxxxx (ID, dag, datumdag, maand, jaar, tijd, melding, korps, soort, discipline, latitude, longtitude)
VALUES ('', '$brandweer_dag', '$datumdag_brandweer', $maand_brandweer, $jaar_brandweer, '$time_brandweer', '$title_brandweer', '$korps', '$soort_brandweer', 'brandweer', '$lat_brandweer', '$long_brandweer')"
);
if ($sql === false){
        echo 'error';
        $message = '
        Updaten van P2000 database op xxxxx is mislukt op: '
. date("d-m-Y @ H:i:s"). ' Reden: Wegschrijven mislukt Brandweer
        '
;
        mail('xxxx', 'P2000 Database update mislukt', $message, 'From: xxxxx');
    }

else{
echo "Succesful: $brandweer_dag $datumdag_brandweer-$maand_brandweer-$jaar_brandweer $time_brandweer $title_brandweer $korps $soort_brandweer <br />";
}

$brandweer_full = "Melding BRW (".$datumdag_brandweer."-".$maand_brandweer." ".$time_brandweer.") ".$title_brandweer."";
if (strlen($brandweer_full) >= 140){
    $brandweer_full = substr_replace($brandweer_full, '...', 137, 137);
}

$tweet->post('statuses/update', array('status' => $brandweer_full)); echo "Tweet: $brandweer_full <br /><br />";
?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/07/2012 21:14:41
Quote Anchor link
Matthijs Vos op 14/07/2012 20:40:40:
Nee, Ik krijg ze niet in een array ik doe hetvolgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
//..
$dag_brandweer = date( 'l', strtotime( $brandweer->pubDate ) );
$datumdag_brandweer = date( 'd', strtotime( $brandweer->pubDate ) );
$maand_brandweer = date( 'm', strtotime( $brandweer->pubDate ) );
$jaar_brandweer = date( 'y', strtotime( $brandweer->pubDate ) );
$time_brandweer = date( 'H:i', strtotime( $brandweer->pubDate ) );
//..
?>

Ik vraag me af waarom je dit doet, je hebt al een datum met een tijd dus dat kun je dan als zodanig in je tabel opslaan.
Gewijzigd op 15/07/2012 08:41:36 door Ger van Steenderen
 
Matthijs Vos

Matthijs Vos

14/07/2012 21:16:22
Quote Anchor link
Je bedoelt gewoon de momentele tijd pakken? Ik pak express de tijd van de melding omdat als de server tijdelijk wegvalt o.i.d. er later in de db alsnog de goede tijd komt te staan.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/07/2012 21:31:04
Quote Anchor link
$brandweer->pubdate is toch altijd vast? Je gaat dat ontleden in gedeeltes, lijkt mij een beetje dubbelop.
 
Matthijs Vos

Matthijs Vos

14/07/2012 21:44:59
Quote Anchor link
Ohh dat bedoel je, dat heb ik ontleed i.v.m. de ORDER BY, anders werkte deze niet goed.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/07/2012 08:44:50
Quote Anchor link
Als je datum in het goede formaat (YYYY-MM-DD HH:MM:SS) staat zou dat niet uit moeten maken, naar mijn gevoel is PHP erg traag met datum/tijd conversies, dus probeer ik die zoveel mogelijk te vermijden.
 
Eddy E

Eddy E

15/07/2012 10:39:59
Quote Anchor link
Op regel 4 heb je dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$brandweer
= simpleXML_load_file('http://feeds.livep2000.nl/?r=25&d=1');
?>


Wat is $brandweer?
Juist, een array.
Maak er eens dit van:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$brandweer
= simpleXML_load_file('http://feeds.livep2000.nl/?r=25&d=1');
$brandweer = array_reverse($brandweer);
?>


Volgens mij staat je array nu andersom gesorteerd.


Mocht dat niet werken, probeer dan dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$brandweer_rev
= array_reverse($brandweer->channel->item);
foreach($brandweer as $brandweer)
?>
Gewijzigd op 15/07/2012 11:58:19 door Eddy E
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/07/2012 11:51:57
Quote Anchor link
Euh? $brandweer is een object!
vardump op jouw $brandweer: NULL

@Matthijs
Is het een idee om een kolom op te nemen in je tabel waarin je bijhoud of er al dan niet getweet is? Dus je insert eerst in de tabel en vanuit de tabel tweet je.
 
Eddy E

Eddy E

15/07/2012 11:58:48
Quote Anchor link
Ja sorry, zag het later ook. Vandaar mijn wijziging in voorgaand bericht.
 
Wouter J

Wouter J

15/07/2012 12:04:36
Quote Anchor link
Ik wil natuurlijk niet irritant overkomen, maar ook $brandweer->channel->item is een object.
Een iterator object wel te verstaan, je kan dus de functie iterator_to_array gebruiken, de array omgooien en vervolgens plaatsen in de foreach.

Edit:
Nee, het is geen Iterator maar een Traversable. Je moet dit omzetten in een SimpleXMLIterator en dan die omtoveren naar een array (iterator_to_array) en dat nog eens omgooien (array_reverse) en dan heb je hem zoals je wilt
Gewijzigd op 15/07/2012 12:11:06 door Wouter J
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/07/2012 12:39:07
Quote Anchor link
Sorry Wouter, maar daar heb je geen gelijk in, $brandweer->channel->item is nl wel een array(van objecten) ;-)
Hoe dan ook, dit lijkt mij ook niet de oplossing voor TS, ik heb voor dit soort situaties een simpele maar botte oplossing dmv van een multiple row insert:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
INSERT IGNORE INTO feeditems (item_id, pubdate, tweeted [,........])
VALUES (12345, '2012-07-14 13:01:00', 0),(34567, '2012-07-15 11:11:11', 0) --etc.

Hierdoor worden als je een unique key zet op de nodige kolom(men) alleen nieuwe waardes ingevoerd.
Gewijzigd op 15/07/2012 12:40:02 door Ger van Steenderen
 
Matthijs Vos

Matthijs Vos

31/07/2012 13:37:17
Quote Anchor link
Hallo allemaal,

Door een crash van mijn laptop heb ik een tijdje niet gereageerd.
De methode om het in een db op te slaan of het getweet is of niet kan niet, want dan gaat de snelheid van het systeem omlaag, en de bedoeling is dat het zo realtime mogelijk is. De methode van Wouter lijkt me wel handig, alleen dat van SimpleXMLIterator snap ik niet. Kan iemand met dit uitleggen?

Matthijs
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.