php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Jobs und Projekte > Projekthilfe
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


Projekthilfe Hier könnt Ihr eine Art Projekthilfe anfordern. Unter Projekthilfe verstehen wir Angebote bei denen KEIN Geld gezahlt werden kann.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 30-07-2008, 00:00
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Question [Coder gesucht] XML-Element(e) auslesen mit PHP4

Hi.

Ich hab mir den Rat bzw. den Link (www.php.net), den ich hier IMMER zu hören bzw. zu sehen bekommen, wenn ich newbhafte Fragen stelle, letztlich zu Herzen genommen und STUNDENLANG copy&past-haft etwas zusammengecodet, was nun tatsächlich auch funktioniert. Zwar bin ich nun schlauer als vorher; aber nicht so schlau, um folgendes Problem in PHP-Code umzusetzen:

Z. Zt. holt sich das Script das erste <FormattedPrice>-Element in der XML-Datei - das ist auch für diese Abfrage immer dasjenige, das ich brauche. Ich möchte nun aber in einer Abfrage zwei <FormattedPrice>-Elemente speichern. Das Problem ist, das die Anzahl der <FormattedPrice>-Elemente variiert; manchmal sind's zwei, mal drei usw. Anders als im ersten Fall, bringt mir das preg_match in dieser Form wenig. Das zweite Element, das ich brauche, ist aber immer in folgender Struktur versteckt:
Code:
<Price>
<Amount>2095</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 20,95</FormattedPrice>
</Price>
Wie krieg ich das (i.e. den Preis samt "EUR" zwischen <FormattedPrice>) jetzt da raus? Wäre wirklich fein, wenn mir jemand helfen könnte!

Das besagte (halb fertige) Script:
PHP-Code:
<?php

function get_remote_file($url)
{
    if (
ini_get('allow_url_fopen')) {
        return 
file_get_contents($url);
    }
    elseif (
function_exists('curl_init')) {
        
$c curl_init($url);
        
curl_setopt($cCURLOPT_RETURNTRANSFER1);
        
curl_setopt($cCURLOPT_HEADER0);
        
$file curl_exec($c);
        
curl_close($c);
        return 
$file;
    }
    else {
        die(
'Error');
    }
}

include 
"includes/connect.php";

$getitems="SELECT itemid,asin from phpbb_amazon";

$getitems2=mysql_query($getitems) or die("Could not get items");

while(
$getitems3=mysql_fetch_array($getitems2))

{

  
$url="http://webservices.amazon.de/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=$acckey
&Operation=ItemLookup&ItemId=$getitems3[asin]&ResponseGroup=Medium,Offers&Condition=All&MerchantID=All"
;

  
$var=get_remote_file($url);

  
$regex '/\<FormattedPrice\>EUR ([0-9]+?,?[0-9]*?)<\/FormattedPrice\>/';
  
  
preg_match($regex,$var,$match);

  
$price $match[1];

  print 
"$price<br>";

  
$updatecron="Update phpbb_amazon set price='$price' where itemid='$getitems3[itemid]'";

  
mysql_query($updatecron) or die("Could not update cron");

  
mysql_query("Delete from bgook");

}

?>

Geändert von baerenwurm (30-07-2008 um 00:02 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 30-07-2008, 00:56
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

preg_match_all hilft dir sicherlich...
Mit Zitat antworten
  #3 (permalink)  
Alt 30-07-2008, 01:01
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Und wie berücksichtige ich da die Zeilenumbrüche zwischen <Price> & <Amount> usw.?
Mit Zitat antworten
  #4 (permalink)  
Alt 30-07-2008, 01:05
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dein Script funktioniert doch bis jetzt, wenn du nur 1x etwas haben willst oder?

Da hast du die Zeilenumbrüche auch nicht berücksichtigt (steht zwar auch nirgends, aber naja...^^)

mfg
Mit Zitat antworten
  #5 (permalink)  
Alt 30-07-2008, 01:32
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Bei der ersten Abfrage muss ich die Zeilenumbrüche nicht berücksichtigen, da der erste Wert, den ich haben will, immer derjenige ist, der zwischen dem ersten <FormattedPrice>-Element vorkommt.

Anders beim zweiten Wert bzw. Preis. Der steht zwar immer ganz unten; die Anzahl der <FormattedPrice>-Elemente zwischen den ersten und den letzten variiert aber, d.h. ich kann nicht einfach den 2. oder 3. Wert abfragen. Ich muss denjenigen Wert zwischen <FormattedPrice> abfragen, der sich zwischen den <Price>-Elementen (kommt nur einmal vor) befindet, abfragen.

Zur Veranschaulichung:

Code:
<OfferSummary>
−
// Der LowestNewPrice steht immer oben; wenn's den nicht gibt, steht der LowestUsedPrice oben;
in jedem Fall derjenige Preis, den ich als erstes haben will.
<LowestNewPrice>
<Amount>2695</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 26,95</FormattedPrice>
</LowestNewPrice>
−
<LowestUsedPrice>
<Amount>2134</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 21,34</FormattedPrice>
</LowestUsedPrice>
−
<LowestCollectiblePrice>
<Amount>2850</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 28,50</FormattedPrice>
</LowestCollectiblePrice>
<TotalNew>14</TotalNew>
<TotalUsed>3</TotalUsed>
<TotalCollectible>2</TotalCollectible>
<TotalRefurbished>0</TotalRefurbished>
</OfferSummary>
−
<Offers>
<TotalOffers>1</TotalOffers>
<TotalOfferPages>1</TotalOfferPages>
−
<Offer>
−
<Merchant>
<MerchantId>blabla</MerchantId>
−
<GlancePage>
http://www.amazon.de/gp/help/seller/...tml?seller=bla
</GlancePage>
</Merchant>
−
<OfferAttributes>
<Condition>New</Condition>
<SubCondition>new</SubCondition>
</OfferAttributes>
−
<OfferListing>
−
<OfferListingId>
bla
</OfferListingId>
−
// Ganz unten steht immer der (Amazon-)<Price>; den will ich als zweiten in meiner MySQL-Tabelle haben. 
<Price>
<Amount>3097</Amount>
<CurrencyCode>EUR</CurrencyCode>
<FormattedPrice>EUR 30,97</FormattedPrice>
</Price>
<Availability>Gewöhnlich versandfertig bei Amazon in 24 Stunden</Availability>
<IsEligibleForSuperSaverShipping>1</IsEligibleForSuperSaverShipping>
</OfferListing>
</Offer>
</Offers>
Mit Zitat antworten
  #6 (permalink)  
Alt 30-07-2008, 01:50
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dein Problem wird von Antwort zu Antwort komplizierter
Dachte immer, dass es andersrum sein sollte ^^..

http://regexp-evaluator.de/evaluator...6d94/#ergebnis

Da haste eine Idee für einen Regex...

mfg
Mit Zitat antworten
  #7 (permalink)  
Alt 30-07-2008, 01:59
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Fein, klappt tadellos
Mit Zitat antworten
  #8 (permalink)  
Alt 30-07-2008, 02:07
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hab doch noch was vergessen

Wie kann ich einen Text, z.B. "nicht verfügbar" anzeigen lassen, wenn er nix finden sollte? (Das war's dann aber wirklich.)
Mit Zitat antworten
  #9 (permalink)  
Alt 30-07-2008, 02:36
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Je nach dem, welchen Code du genommen hast:

Sagen wir $matches beinhaltet die Treffer:

PHP-Code:
if(count($matches) == 0) echo "no result"
Mit Zitat antworten
  #10 (permalink)  
Alt 30-07-2008, 02:55
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke! Kann ich die "no result"-Ausgabe auch als Variable definieren, um sie -statt dem Preis - in der MySQL-Tabelle abspeichern zu können?
Mit Zitat antworten
  #11 (permalink)  
Alt 30-07-2008, 02:56
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Versuchs?
Das solltest du denk ich auch alleine hinbekommen...

mfg
Mit Zitat antworten
  #12 (permalink)  
Alt 30-07-2008, 03:07
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ok, danke für deine Hilfe!
Mit Zitat antworten
  #13 (permalink)  
Alt 30-07-2008, 03:23
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nicht unbedingt eine Heldentat, aber ich hab's hinbekommen:

PHP-Code:
  if(count($matchbest) == 0){

  
$pricebest "ausverkauft";

  }else{

  
$pricebest $matchbest[1];
  
  } 
Mit Zitat antworten
  #14 (permalink)  
Alt 30-07-2008, 08:42
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

XML sollte man normalerweise besser mit XML-Funktionen an den Kragen gehen und nicht per Regex!
Mit Zitat antworten
  #15 (permalink)  
Alt 09-09-2009, 00:29
baerenwurm
 Registrierter Benutzer
Links : Onlinestatus : baerenwurm ist offline
Registriert seit: Oct 2001
Beiträge: 87
baerenwurm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi.

Seit Amazon eine Signatur beim Abfragen von Preisen u.a. verlangt, kann ich mein altes regex-Skript nicht mehr benutzen.

Habe nun versucht, das hier irgendwie mit Teilen meines alten Skripts zu verbinden.

Leider werden die Werte nicht in meine MySQL-Datenbank übertragen ($updatecron):

PHP-Code:
<?php

include "includes/connect.php"// Datenbank-Login

include "aws_signed_request.php"// PHP-Funktion

$getitems="SELECT itemid,asin from phpbb_amazon";

$getitems2=mysql_query($getitems) or die("Could not get items");

while(
$getitems3=mysql_fetch_array($getitems2))

{

$pxml aws_signed_request("de", array("Operation"=>"ItemLookup","ItemId"=>$getitems3[asin],"ResponseGroup"=>"OfferSummary","Condition"=>"All","MerchantID"=>"All"), $public_key$private_key);
if (
$pxml === False)
{
    echo 
"Siehe Shop";
}
else
{
    if (isset(
$pxml->Items->Item->OfferSummary->LowestNewPrice->FormattedPrice))
   {
        echo 
$pxml->Items->Item->OfferSummary->LowestNewPrice->FormattedPrice"\n";
    }
   else
   {
        echo 
$pxml->Items->Item->OfferSummary->LowestUsedPrice->FormattedPrice"\n";
   }
}


  
$updatecron="Update phpbb_amazon set price='$pxml' where itemid='$getitems3[itemid]'";

  
mysql_query($updatecron) or die("Could not update cron");

  
mysql_query("Delete from bgook");

}

?>
Kann mir irgendwer helfen? Bin mir sicher, dass es für euch ziemlich offensichtlich sein muss, was an dem dilettantisch zusammenkopierten Code falsch ist...
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:59 Uhr.