Gå til innhold

PHP + cURL


Anbefalte innlegg

Har nå startet med cURL, og forsåvidt fått hentet ut informasjon fra diverse nettsider.

Eller, det vil, jeg har hentet ut HELE nettsida.

 

Men jeg tenkte jeg kunne prøve å printe ut informasjon som står mellom to tags, noe jeg rett og slett ikke klarer.

Det blir ikke printet ut noe, med andre et tomt resultat.

 

//cURL code

$ch = curl_init("www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

$strpos = substr($output, "<title>");
$find = strpos($output, $strpos);
$strpos1 = strpos($find, "</title>");
$t = substr($find, $strpos, $strpos1);

echo "$t";
?>

 

Som dere sikkert skjønner, prøver jeg å printe ut noe så basic som tittelen på example.com.

Men jeg skjønner rett og slett ikke hva jeg gjør feil...

Har jeg misforstått strpos og substr-funksjonene?

 

 

//s1gh

Lenke til kommentar
Videoannonse
Annonse

$strpos = substr($output, "<title>"); //returnerer hele $output fordi "<title>" blir til 0
$find = strpos($output, $strpos); //returnerer et tall som sikkert er 0
$strpos1 = strpos($find, "</title>"); //returnerer false
$t = substr($find, $strpos, $strpos1); //returnerer en tom streng fordi du spør etter lengde på 0 (false).
echo "$t"; //ikke nødvendig med " rundt $t

 

Du ser vel etter noe slikt som

$startText = '<title>';
$endText = '</title>';
$startPos = strpos($output, $startText) + strlen($startText);
$length = strpos($output, $endText) - $startPos;
$t = substr($output, $startPos, $length);
echo $t;

eller

$regex = '#<title>(?P<title>[^<]*)</title>#s';
if (!preg_match($regex, $output, $matches)) {
//no matches
exit('Site has no title tags!');
}
$t = $matches['title'];
echo $t;

 

Edit: english overload ... og lengde forklaring.

Endret av OISNOT
Lenke til kommentar

$startText = '<title>';
$endText = '</title>';
$startPos = strpos($output, $startText) + strlen($startText);
$length = strpos($output, $endText) - $startPos;
$t = substr($output, $startPos, $length);
echo $t;

 

Den koden printet ikke ut tittelen...Den printet ut hele siden - som jeg forsåvidt kunne gjort uten strpos osv.

 

Noen som vet hva som er feil?

Lenke til kommentar

Har ikke prøvd akkurat den kodesnutten der, men har lest litt om preg_match.

 

Men jeg skjønner ikke hvorfor det ikke vil funke med koden over, altså med strpos og substr.

Vil gjerne finne ut hva jeg gjør feil i den koden, før jeg prøver å løse det på en annen måte... :)

 

Og angående det med tittelen, det var bare et eksempel. Ville hente ut informasjonen mellom <title> og </title> som et forsøk på skjønne hvordan det fungerer.

Senere skal jeg selvfølgelig hente ut data mellom andre tags.

 

 

Edit: prøvde nå kodesnutten med preg_match, men ser ikke ut til at den funker heller, desverre.

Endret av Sigh
Lenke til kommentar
Den koden printet ikke ut tittelen...Den printet ut hele siden - som jeg forsåvidt kunne gjort uten strpos osv.

 

Noen som vet hva som er feil?

 

Min feil, må bruke stripos.

$startText = '<title>';
$endText = '</title>';
$startPos = stripos($output, $startText) + strlen($startText);
$length = stripos($output, $endText) - $startPos;
$t = substr($output, $startPos, $length);
echo $t;

 

og med case insensitivity for regex

$regex = '#<title>(?P<title>[^<]*)</title>#is';
if (!preg_match($regex, $output, $matches)) {
//no matches
exit('Site has no title tags!');
}
$t = $matches['title'];
echo $t;

Lenke til kommentar

Bare vær obs på at alle XML/DOM-funksjonene til PHP kommer til å protestere om siden ikke er valid XML/XHTML. Du må eventuelt kjøre disse gjennom tidy, så kan du kjøre xpath (spørrespråk mot XML) mot dem.

 

Det finnes også en tredjepartsklasse som kan gjøre dette og som aksepterer invalid XML:

 

http://simplehtmldom.sourceforge.net/

 

Denne er som oftest veldig kjekk, men har noen bugs og snodigheter av og til.

 

Ettersom større og større deler av den HTML som produseres er valid, er det en god ide å lære seg XPATH. Det finnes nå egne XML-databaser som har XPATH som spørrespråk i stedet for SQL, og DB2 v9 støtte for å kjøre XPATH inni SQL-spørringer.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...