Default page opvragen

Status
Niet open voor verdere reacties.

Snarffy

Gebruiker
Lid geworden
23 okt 2009
Berichten
35
Hallo lezers,

D.m.v. een "stream_get_contents" wil ik "Now Playing" informatie opvragen, de URL is b.v. "http://91.221.151.178:8109/" welke ik verkregen heb van een externe source. Deze URL heeft een default page waar de de "Now Playing" informatie op staat, de Default page is "http://91.221.151.178:8109/index.html?sid=1".

Weet iemand hoe ik die URL geautomatiseerd kan verkrijgen zodat ik d.m.v. de "stream_get_contents" de juiste informatie kan uitlezen, het liefst d.m.v. PHP.

Gr Snarffy
 
Je kan DOMdocument in PHP gebruiken om de HTML-DOM uit te kunnen pluizen.
 
stel je zoekt een job als programmeur doe je het uiteraard niet mannueel maar met code.
stel je wil het sorteren zonder veel moeite (ook door zoekrobots gebruikt)de eerste scripts google alta-vista ask werkten ook zo maar ook met caches en files om niet te veel connecties te gebruiken om controles te kunnen doen nadien en te weten van waar iets komt.

PHP:
/*niet te verwijderen tekst : Met dank @forum helpmij */
       if(strpos($source,'id="LINK_JOBSPOT"')){
            print "JOBSPOT SELECTION";
       }
            $regx = '|<h\d>((?<name>[1-9A-Za-z ]+)</h\d>+)'.
                    '( +Functie (?<content_functie>\w+))?'.
                    '( +Profiel (?<content_profiel>\w+))?'.
                    '( +Aanbod (?<content_aanbod>\w+))?'.
                    '|';
            preg_match_all($regx,$x,$result,PREG_PATTERN_ORDER);
Zowel bovenstaande methode van werken alsook werken met cachfiles zonder details te geven. staan onder copyright van mij en zomeer te gebruiken.Maar mag en kan niet als eigendom worden beschouwd.

Code:
$x //is de tekst waarin gezocht wordt
$result //is het resultaat van de code
 
PHP4U bedankt voor je antwoord, ik weet hoe ik pagina's kan scrapen maar waar het mij omgaat is dat ik de URL van de default page wil gebruiken in PHP. Misschien dat mijn eerder geplaatste vraag niet duidelijk is, maar het gaat om het volgende:

In een MySql database heb ik 20.000 Internet Radio Stream URL's staan
Via PHP kan men daaruit selecteren, zodra dat gedaan is kan men eea "afspelen" remote of lokaal.
Zodra eea afgespeelt wordt laat ik de "Now Playing" informatie zien, welke in de meeste gevallen in de stream zit maar het kan ook verkregen worden uit een HTML pagina.
Zodra je kiest voor b.v. de URL "http://91.221.151.178:8109/" en dit laat afspelen dan verandert de URL vanwaar afgespeeld wordt automatisch (daar wordt door mij niets voor gedaan) in "http://91.221.151.178:8109/index.html.1", de "Now Playing" info moet in dit geval van de HTML pagina "http://91.221.151.178:8109/index.html?sid=1" verkregen worden. Deze pagina ("http://91.221.151.178:8109/index.html?sid=1") wordt automatisch opgevraagd zodra je b.v. "http://91.221.151.178:8109/" ingeeft in de adres balk van de webbrowser.
In dit geval is dus de default page van "http://91.221.151.178:8109/" "http://91.221.151.178:8109/index.html?sid=1".

Waar het mij dus omgaat is dat ik d.m.v. een PHP statement "http://91.221.151.178:8109/" ingeef en "http://91.221.151.178:8109/index.html?sid=1" terugkrijg.

Met vriendelijke groet,

Snarffy
 
Beste kenikavanbis, bedankt voor je antwoord. Zie mijn antwoord aan PHP4U.
 
Als je het IP-adres als data hebt dan kun je toch gewoon daar de boel aan concatten?

PHP:
$var = 'http://192.168.1.1:8109/';

$default = $var .'index.html?sid=1';
 
Beste Tha devil, bedankt voor je antwoord. Het gaat er dus om dat de default URL verkregen wordt, "http://192.168.1.1:8109/index.html?sid=1". Zoals ik al schreef staat b.v. de URL "http://192.168.1.1:8109/" in de MySql DB de "index.html ?sid=1" moet verkregen worden.
 
Dus als ik het goed begrijp dan kan dat dus afwijken? Het is niet voor elke server index.html?sid=1?

Wanneer je naar zo'n IP surft wordt je altijd doorgestuurd naar die default URL?

Als ik dan deze stackoverflow discussie kijk dan kan dat via cURL:
PHP:
<?php 

$url="http://91.221.151.178:8109/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Must be set to true so that PHP follows any "Location:" header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$a = curl_exec($ch); // $a will contain all headers

$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // This is what you need, it will return you the last effective URL

// Uncomment to see all headers
/*
echo "<pre>";
print_r($a);echo"<br>";
echo "</pre>";
*/

echo $url; // Voila
 
Beste Tha Devil, bedankt voor je antwoord.

De "Default Page" heeft een Default waarde maar kan ook overschreven worden, dus je kan er niet vanuit gaan dat dit altijd index.html is.

Uiteraard heb ik zelf ook al her en der gezocht, cURL ben ik ook tegengekomen en heb PHP ook gecompileerd met cURL. Maar het voorbeeld van jou van stackoverflow geeft bij mij althans niet het gewenste resultaat. Het lijkt er op dat cURL de "stream" uit wil lezen en verwacht een einde maar omdat het een Internet Radio Stream is zal dat er nooit komen, de browser (in mijn geval FF) geeft een tegen de klok in draaiend icoontje.

Werkt het voorbeeld bij jou wel ?

Gr Snarffy
 
Laatst bewerkt:
interpreter NIET gelijk aan compiler
en bij mijn weten als je geen phar maakt je ook niet compileert . Ik had dus ook graag geweten wat u met dat compileren bedoeld.
 
Hallo kenikavanbis, bedankt voor je reactie.

Ik weet dat een interpreter niet gelijk is aan een compiler, vroeger met basic interpreters gewerkt en Cobol en c compilers. Daar eea zo werd omschreven op een van de site's heb ik dat overgenomen maar het kwam neer op een install.

phpinfo() - curl ziet er zo uit:

Bekijk bijlage 240693
 
Heb je een IP-adres waarbij die default page afwijkt? Wellicht is het namelijk mogelijk om de headers uit te lezen om zo de redirect te achterhalen.
 
Ha Tha Devil, bedankt voor antwoord. het Ip Adress is /http://91.221.151.178:8109/ en als ik met de volgende code de headers uitlees ziet eea er zo uit :

<?php

if ($stream = fopen('http://91.221.151.178:8109/', 'r',1)) {
$headers = get_headers('http://91.221.151.178:8109/');
foreach ($headers as $h)
{
print_r($headers);
}
}

?>

Output

Array ( [0] => HTTP/1.0 200 OK [1] => icy-notice1:
This stream requires Winamp
[2] => icy-notice2:SHOUTcast DNAS/posix(linux x64) v2.4.7.256
[3] => icy-name:Arrow Classic Rock [4] => icy-genre:Rock [5] => icy-br:128 [6] => icy-url:http://www.arrow.nl [7] => icy-pub:0 [8] => content-type:audio/mpeg [9] => X-Clacks-Overhead:GNU Terry Pratchett ) Array ( [0] => HTTP/1.0 200 OK [1] => icy-notice1:
 
Zover was ik ook, maar dit IP-adres verwijst naar de standaard pagina. Dus vandaar de vraag naar een IP dat niet naar /index.html?sid=1 doorstuurt ;)
 
Beste Tha Devil, nog bedankt voor het meedenken. Ik denk dat ik er nu wel ben.

Heb nu het volgende php scripts :

<?php
$interval = 19200;
$offset = 0;
$streamingUrl = 'http://91.221.151.178:8109/';
$headers = true;
$ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36';


$opts = array('http' => array(
'method' => 'GET',
'header' => 'Icy-MetaData: 1',
'user_agent' => $ua
)
);

if ($headers = get_headers($streamingUrl)) {
foreach ($headers as $h){
//print_r($headers);
$currentSection = explode(':', $h);
if (strpos(strtolower($h), 'icy-metaint') !== false && ($interval = $currentSection[1])) {
break;
}
}
}

$context = stream_context_create($opts);

if ($stream = fopen($streamingUrl, 'r', false, $context))
{
while($buffer = stream_get_contents($stream, $interval, $offset)) {
$type = stream_get_meta_data($stream);
for ($j = 0; isset($type[wrapper_data][$j]); $j++) {
$expl = explode(':',$type[wrapper_data][$j]);
$status = explode('HTTP/',$type[wrapper_data][$j]);
if ( $expl[0] == 'Location' || $status[1] <> '') {
print_r($expl[1] . explode(' ',$status[1])[1] .'<br>');
}
}
}
}
fclose($stream);
?>

En de output is dan :

302
index.html?sid=1

Groet,

Snarffy
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan