php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.12.2006, 01:40  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

die 'variante von M3g4Star' bildet die struktur ja auch flach ab, nicht als verschachteltes array. dafür sind die open und close angaben und der index da.

wenn du dir für die simple_xml variante mal das ganze ansehen würdest, z.b. so
PHP-Code:
<?php 
$url 
'http://www.google.com/calendar/feeds/webmaster%40marktgemeinde-seibersdorf.at/public/basic';
$xml simplexml_load_string(file_get_contents($url));

foreach (
$xml->entry as $nachrichtprint_r($nachricht);
würdest du feststellen, dass du link natürlich nicht direkt ausgeben kannst, weil link
a) ein array ist
b) keine inhalte sondern objekteigenschaften hat:
Zitat:
SimpleXMLElement Object
(
[id] => http://www.google.com/calendar/feeds...tia7snek689p80
[published] => 2006-12-07T10:46:28.000Z
[updated] => 2006-12-07T10:50:57.000Z
[category] => SimpleXMLElement Object
(
[@attributes] => Array
(
[scheme] => http://schemas.google.com/g/2005#kind
[term] => http://schemas.google.com/g/2005#event
)

)

[title] => Feuerwehr Ball
[summary] => Wann: Sa, 13. Jan 2007 20:00 bis 00:00 CET

Wo: Seibersdorf, Austria
Status des Termins: bestätigt
[content] => Wann: Sa, 13. Jan 2007 20:00 bis 00:00 CET

Wo: Seibersdorf, Austria
Status des Termins: bestätigt
[link] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[rel] => alternate
[type] => text/html
[href] => http://www.google.com/calendar/event...mVyc2RvcmYuYXQ
[title] => alternate
)

)
ist mein erster versuch mit simple_xml aber so gehts:
PHP-Code:
<?php 
$url 
'http://www.google.com/calendar/feeds/webmaster%40marktgemeinde-seibersdorf.at/public/basic';
$xml simplexml_load_string(file_get_contents($url));

foreach (
$xml->entry as $nachricht)  
  {
  
$attr $nachricht->link->attributes();
  echo 
$attr['href'];
  }
nikosch ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.12.2006, 09:19  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Wenn du uns einfach ein Beispiel zeigen würdest wie du es haben wolltest dann könnte man bestimmt auch näher auf dein Problem eingehen. Willst du nur die Links ?? Willst du alles ? Wilst du alles auslesen und jeden Tag nacheinander ausgeben wobei du links erzeugst ???

Mit einer XML kann man so viel anfagen ..

PHP-Code:
<?php
       $file
='http://www.google.com/calendar/feeds/webmaster%40marktgemeinde-seibersdorf.at/public/basic';        
               
$handle fopen($file"rb");
               
$contents '';
               while (!
feof($handle)) {
                 
$data .= fread($handle8192);
                }
               
fclose($handle);
               
$data=str_replace("<?xml version='1.0' encoding='UTF-8'?>","",$data);
  


/* Usage
 Grab some XML data, either from a file, URL, etc. however you want. Assume storage in $strYourXML;
 $strYourXML="http://www.google.com/calendar/feeds/webmaster%40marktgemeinde-seibersdorf.at/public/basic";
 $objXML = new xml2Array();
 $arrOutput = $objXML->parse($strYourXML);
 print_r($arrOutput); //print it out, or do whatever!
 
*/

#CLASS BEGIN
class xml2Array {
  
   var 
$arrOutput = array();
   var 
$resParser;
   var 
$strXmlData;
  
   function 
parse($strInputXML) {
  
           
$this->resParser xml_parser_create ();
           
xml_set_object($this->resParser,$this);
           
xml_set_element_handler($this->resParser"tagOpen""tagClosed");
          
           
xml_set_character_data_handler($this->resParser"tagData");
      
           
$this->strXmlData xml_parse($this->resParser,$strInputXML );
           if(!
$this->strXmlData) {
               die(
sprintf("XML error: %s at line %d",
           
xml_error_string(xml_get_error_code($this->resParser)),
           
xml_get_current_line_number($this->resParser)));
           }
                          
           
xml_parser_free($this->resParser);
          
           return 
$this->arrOutput;
   }
   function 
tagOpen($parser$name$attrs) {
       
$tag=array("name"=>$name,"attrs"=>$attrs);
       
array_push($this->arrOutput,$tag);
   }
  
   function 
tagData($parser$tagData) {
       if(
trim($tagData)) {
           if(isset(
$this->arrOutput[count($this->arrOutput)-1]['tagData'])) {
               
$this->arrOutput[count($this->arrOutput)-1]['tagData'] .= $tagData;
           }
           else {
               
$this->arrOutput[count($this->arrOutput)-1]['tagData'] = $tagData;
           }
       }
   }
  
   function 
tagClosed($parser$name) {
       
$this->arrOutput[count($this->arrOutput)-2]['children'][] = $this->arrOutput[count($this->arrOutput)-1];
       
array_pop($this->arrOutput);
   }
}

#CLASS END


function readRecursiv($recurArray) { 
     foreach(
$recurArray as $myArray) {
         if(isset(
$myArray['children'])) readRecursiv($myArray['children']); 
         else
             
#echo "<pre>"; 
             
if($myArray['name']=="LINK") echo $myArray['attrs']['HREF']."
"
;
             
#print_r($myArray); //print it out, or do whatever!
             #echo "</pre>";
     
}
}

$strYourXML=$data;
$objXML = new xml2Array();
$arrOutput $objXML->parse($strYourXML);

readRecursiv($arrOutput[0]['children']); 

?>
jetzt hast du's gleiche wie bei nikosch77
M3g4Star ist offline  
Alt 14.12.2006, 17:53  
Gast
 
Beiträge: n/a
Standard

@M3g4Star und du hättest mir echt zugetraut oder erwartet, dass ich mir selber so ein konstrukt aufgrund deiner hinweise aus dem ärmel schüttel?
nicht umsonst hab ich diesen thread im anfängerforum geschrieben, würde ich das obige nur ansatzweise verstehen, hätte ich wahrscheinlich keine hilfe mehr notwendig.
danke, für deine hinweise aber du setzt wohl ein bischen viel voraus.

ich bin wie gesagt anfänger und komm mit dem andern beispiel glücklicherweise recht gut zurecht und versteh es sogar, danke an nikosch77 .
jetzt ist das ärgste überstanden, hoff ich.

so siehts aus, bis jetzt.
PHP-Code:
$url 'http://www.google.com/calendar/feeds/webmaster%40marktgemeinde-seibersdorf.at/public/basic';

$xml simplexml_load_string(file_get_contents($url)); 

foreach (
$xml->entry as $nachricht)  
{
    
$attr $nachricht->link->attributes(); 
    
printf('[url="%s"]%s[/url]%s
'

    
$attr['href'],
    
utf8_decode($nachricht->title), 
    
utf8_decode($nachricht->content)); 
 

was ich machen möchte ist eine vorschau auf der startseite mit den nächsten 2-3 terminen aus dem kalender.
das heisst, jetzt muss ich mir aus dem content string das datum parsen, vergleichen mit den anderen datensätzen um sie zu sortieren und danach in der richtigen reihenfolge die aktuellsten 2-3 ausgeben.

http://www.marktgemeinde-seibersdorf...dex_test6.html
hier sind jetzt (am unteren ende) mal die überschriften mit den richtigen datensätzen verlinkt.
der content string ist hier auch dabei, aus dem muss ich jetzt das datum und möglicherweise die eigentliche eventbeschreibung extrahieren.
 
Alt 15.12.2006, 08:55  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Hormic
@M3g4Star und du hättest mir echt zugetraut oder erwartet, dass ich mir selber so ein konstrukt aufgrund deiner hinweise aus dem ärmel schüttel?
nicht umsonst hab ich diesen thread im anfängerforum geschrieben, würde ich das obige nur ansatzweise verstehen, hätte ich wahrscheinlich keine hilfe mehr notwendig.
danke, für deine hinweise aber du setzt wohl ein bischen viel voraus.
Tja .. DAS galub ich weniger
Du hättest meinem ersten Post folgen können und dir die Komentare auf php.net anschauen sollen. Naja ok .. Stimmt .. anscheinend zu anspruchsvoll. Aber mehr als copy paste hab ich eigentlich auch nicht gemacht. nur noch ein wenig modifiziert.

Aber gut hast ja diene Lösung jetzt.

Tips für dein nächstes Problem:

http://www.regex-tester.de/
http://www.regenechsen.de/phpwcms/in...ex_dt_elemente

Einfach RAN und TSCHAKKAAAAA :wink:

VIEL GLÜCK
M3g4Star ist offline  
Alt 20.12.2006, 22:17  
Gast
 
Beiträge: n/a
Standard

so weiter gehts
vorweg mal danke für deine links, speziell der erste hat mir sehr weiter geholfen und bin grade wieder ein paar stunden an der umsetzung des vorhin genannten gesessen und hab folgendes zusammengebracht.

PHP-Code:
foreach ($xml->entry as $nachricht)  
{

   
// funktion die Zb: alle Jan in 1 umwandelt
    
$nachricht->summary monatsersetzung($nachricht->summary);

     
// Filtern des Datums aus den Strings
     
$suchmuster "/(\d+)\. (\d+)?. (\d+)/i"
     
preg_match_all($suchmuster$nachricht->summary$treffer);
           
    
// zuweisung an die variable, je nachdem ob die arrays gesetzt sind oder nicht
    
$nachricht->summary = isset($treffer[0][0]) ? ( isset($treffer[0][1])? $treffer[0][0].' - '.$treffer[0][1] : $treffer[0][0]  ) :''
     echo 
utf8_decode($nachricht->summary);
     echo 
'<pre>'print_r($treffertrue), '</pre>'


//     echo time().' - ';   // timestamp jetzt
//     echo mktime(0,0,0,$treffer[1][0],$treffer[2][0],$treffer[3][0]);
   
 

Ohh mann sowenig code für so viele stunden
soweit so gut jedenfalls, so sieht das ganze aus -> http://www.marktgemeinde-seibersdorf...ex_test71.html
jetzt zur neuerlichen problematik:
wie kann ich die timestamps sortieren?? bzw. untereinander vergleichen?
oder soll ich das ergebnis irgendwo mitspeichern, aber wenn ja - wie und wohin?
 
Alt 21.12.2006, 08:41  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Also eine Methode wäre:

(*öhm* auch wenn's nicht so die beste in meinen Augen ist, aber gerade die einzigste die mir spontan einfällt)

Du könntest mittels Hilfe von mktime() einen timestamp erstellen und dann nach diesem sortieren. Weil ich nicht genau weiß ob eine Sortierung bei dem "kompletten" Datum (du hast keine führende NULL) funktioniert.

ODER

Du sortierst erst nach Jahr dann nach Monat dann nach Tag ... ^^

hier hast du unter der Kommentaren ein sehr sehr passendes Beispiel.
http://de2.php.net/manual/en/function.usort.php
M3g4Star ist offline  
Alt 21.12.2006, 12:09  
Gast
 
Beiträge: n/a
Standard

das ist mir klar, was du da vorschlägst.
ich hab auch den timestamp mittels mktime() schon im obigen beispiel dabei - im auskommentierten bereich, was mir nicht klar ist, ist die übergeordnete umsetzung, also nicht die vergleiche im detail, dass krieg ich schon hin.

momentan ist es ja so, dass ich mit
PHP-Code:
foreach ($xml->entry as $nachricht
durch die einzelnen einträge durchgehe,
aber die einträge sind leider kein array, dass man mittels sortieralgo einfach so miteinander vergleichen kann, oder doch?
dass einzige was ich hier noch zustandebringen würde, wäre eben die tage, die schon vergangen sind wegzulassen, aber wie ich die sortierung an sich hinkriege, kann ich mir momentan leider noch nicht vorstellen.
(jetzt nicht von den befehlen und schleifen im detail, sondern wie ich das ganze angehen soll, mit diesen datentypen.)

also hilfe würde ich dahingehend brauchen, dass mir jemand sagt:
zB: das beste ist du machst noch eine 2te foreach schleife,
oder du speicherst bei jedem eintrag ein flag mit, oder du musst die
sortierten einträge nochmal irgendwo zwischenspeichern.

mit praktischem beispiel am besten (nur vom überbau )
 
Alt 21.12.2006, 14:56  
Gast
 
Beiträge: n/a
Standard

die entscheidende frage ist glaub ich, wie kann ich ein element vom typ
$xml->entry einstweilen zwischenspeichern??
 
Alt 21.12.2006, 15:36  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

ALSO..

Mal kurz einen Anfang: (ohne weiter zu überlegen sondern einfach mal so drauf los...)

Array machen ...
PHP-Code:
<?php
$xml_array
[]=$nachricht;
?>
Code:
[Wann: | bis ][A-Za-z]{2}, ([\d]{1,2})\. ([A-Za-z]{3})\. ([\d]{4}) (\d\d):(\d\d)
Damit kannst du einerseits das DATUM und dann die Uhrzeit auslesen. Alles in kleinen häppchen wenn dein Eintrag wirklich IMMER so ausschaut.


Dann weiter:
mktime()
PHP-Code:
 <?php
 
echo "von:".date("Y-m-d H:i:s",mktime($array[4][0],$array[5][0],0,$array[2][0],$array[1][0],$array[3][0]))." bis ".date("Y-m-d H:i:s",mktime($array[4][1],$array[5][1],0,$array[2][1],$array[1][1],$array[3][1]))."
"
;

?>
so bekommst dann die Timestamps. Jetzt mal nur schnell mit date() ausgegeben damit siehst das's klappt.

Jetzt müsstest du nach diesen timestamps sortieren (also timestamp Feld im Array HINZUFÜGEN) dann der reihe nach ausgeben ..

*öhm*

Jo .. soweit meine Gedanken auch wenn manchmal recht konfus

M3g4Star ist offline  
Alt 21.12.2006, 16:04  
Gast
 
Beiträge: n/a
Standard

*schluchz* danke für deine abermalige antwort, aber ich fürchte wir schreiben aneinander vorbei, hab ichs so schlecht beschrieben oder hast du mir die lösung gesagt und ich kapiers nicht??

siehe mein posting von gestern mit dem codebeispiel, da hab ich doch das datum schon ausgelesen. und hier die ausgabe -> http://www.marktgemeinde-seibersdorf...ex_test71.html
das funktioniert wunderbar auch wie ich einen timestamp mache weiss ich,
siehe code oben -// echo mktime(0,0,0,$treffer[1][0],$treffer[2][0],$treffer[3][0]);
auch kein problem, auch wie ichs mit date ausgebe weiss ich.
aber nur wie ich mit diesen typen $xml->entry hantiere, wie ich sie zwischenspeichere und wo ich das machen soll mit der sortierung weiss ich nicht.

nochmal die entscheidenden sätze von meinem vorherigen posting:

also hilfe würde ich dahingehend brauchen, dass mir jemand sagt:
zB: das beste ist du machst noch eine 2te foreach schleife,
oder du speicherst bei jedem eintrag ein flag mit, oder du musst die
sortierten einträge nochmal irgendwo zwischenspeichern.


mit praktischem beispiel am besten (nur vom überbau )
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ordner auslesen und während des auslesen sortieren Dooki PHP Tipps 2008 6 14.05.2008 17:50
Vom Browser verschickte Daten auslesen und anzeigen? andy32 PHP Tipps 2008 3 22.08.2007 18:33
suche atom feed integration beispiel Trash 1 08.12.2006 05:23
RSS2.0 Feed auslesen und Grafik generieren PHP Tipps 2006 4 12.10.2006 15:23
gelöst: Tabelle auslesen -&amp;amp;amp;gt; Gleiche Einträge nur 1 Mal Datenbanken 3 31.03.2006 01:44
Textdatei auslesen, aber ohne Komentare HSFighter PHP Tipps 2006 31 23.02.2006 10:07
Cookies auslesen HSFighter PHP Tipps 2007 2 19.11.2005 14:56
[Erledigt] bestimmte ID's auslesen als array PHP Tipps 2007 2 31.10.2005 20:23
Daten eintragen und auslesen Rettungsdackel Datenbanken 0 14.09.2005 16:29
Daten aus einer Datenbank auslesen Datenbanken 2 04.09.2005 19:13
[Erledigt] nächste Zeile einer Db auslesen? PHP Tipps 2005-2 7 01.08.2005 00:11
alle Verzeichnisse sortiert auslesen PHP Tipps 2005-2 7 17.07.2005 10:20
auslesen und nochmals auslesen?! $$$ ThiKool $$$ PHP Tipps 2005 23 10.03.2005 19:43
[Erledigt] Auslesen von Text incl. &quot; aus Textfeld PHP Tipps 2007 4 04.01.2005 13:30
[Erledigt] Daten von anderer Homepage auslesen PHP Tipps 2004-2 5 02.12.2004 18:49

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
<atom:summary type=\'text\'> auslesen, link[0]->attributes(); atom feed link auslesen php, xml mit file_get_contents auslesen verschachtelt, content = simplexml_load_string(file_get_contents, atom feed datum auslesen, $xml = simplexml_load_string(file_get_contents($url=\'\'));, atom feed php, atom feed per php auslesen und in html ausgeben -rss, eine seite als atom feed, atom auslesen php atom link, php text aus homepage auslesen trim, feed auslesen, atom parse, php uhrzeit auslesen, atom feed anzeigen als xml

Alle Zeitangaben in WEZ +1. Es ist jetzt 08:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.