PHP GET Daten von externer URL abrufen

maxi888

maxkops.de
ID: 386105
L
5 Juli 2010
2.088
55
Hallo,

ich würde gerne aus einem externen Link via GET die Daten abfragen. Genauer gesagt soll aus einem langen Youtube Link nur die VideoID entnommen werden.

Formulare und GET/POST Abfragen beherrsche ich aber wie funktioniert dies mit externen Quellen?

Beispielsweise folgender Link:

https://www.youtube.com/watch?v=sQtFyp-AxP4&feature=endscreen&NR=1

v (die Video ID) wäre in diesem Falle sQtFyp-AxP4

Wie kann ich das aber mit PHP automatisieren?

Muss ich die Linkeingabe oben an meine eigene URL hängen und dann mit GET arbeiten oder wie gehe ich vor?


Wäre über einen Rat sehr dankbar.

Gruß
Max
 
Du kannst die Video-ID mit nem simplen RegEx aus der URL holen:
PHP:
preg_match('/v=([^&]+)/', $URL, $matches);
In $matches[1] steht dann die Video-ID, wie die die URL in die Variable bekommst bleibt dir dann überlassen.
 
Damit würde ich dann den URL String nach "v=" durchsuchen und es anschließend in die Array schreiben. Aber was wird in die Array geschrieben?

Habe gerade einen Kollegen gefragt er schrieb folgendes:

function getParameters($url)
{
$params = substr($url, strpos($url, "?"));
if (!(strpos($params, "&") > 0))
{
//sonderanweisung, da es nur ein $_GET parameter gibt
return array(explode("=", $params)[0] => explode("=", $params)[1]);
}
$args = explode("&", $params);
$returnarray[];
foreach ($args as $arg)
{
$argname = explode("=", $arg)[0];
$returnarray[$argname] = explode("=", $arg)[1];
}
return $returnarray;
}


Habe ich das richtig verstanden?

$params = substr($url, strpos($url, "?"));

Funktion substr()
Gibt den Teil von string zurück, der durch die Parameter start und length definiert wurde.

Also wird hier im substr Befehl der Stringstandpunkt für das "?" ermittelt
Das ? steht ja immer vor der ersten GET Variable. Somit hat man den Startwert für substr.


if (!(strpos($params, "&") > 0))
{
//sonderanweisung, da es nur ein $_GET parameter gibt
return array(explode("=", $params)[0] => explode("=", $params)[1]);
}

Wenn es nur eine GET Variable gibt, geht man von der Video ID aus und liest sie direkt mit explode aus.
return gibt den Wert aus und beendet die weitere Ausführung

$args = explode("&", $params);
$returnarray[];
foreach ($args as $arg)

Mit explode werden die verschiedenen Argumente zerteilt (da ja durch & getrennt ist der Delimiter auch "&" )
Es wird angegeben, dass es sich bei $returnarray um eine Array handelt.
Alle Arrayinformationen werden in $arg verschoben

{
$argname = explode("=", $arg)[0];
$returnarray[$argname] = explode("=", $arg)[1];
}
return $returnarray;
}

$arg enthält nur noch die Arrays.
$returnarray enthält dann jedes Argument des Links
return $returnarray übergibt das Endergebnis

EDIT:

preg_match('/v=([^&]+)/', $URL, $matches);

In $matches[1] steht dann die Video-ID, wie die die URL in die Variable bekommst bleibt dir dann überlassen.

Wäre das nicht $matches[0]?
 
Zuletzt bearbeitet:
EDIT:
Wäre das nicht $matches[0]?

In $matches[0] steht der komplette gematchte String, also "v=....", in $matches[1] steht nur das in der 1. Klammer (also nur die ID selbst).

Wenn du alle Parameter haben willst, schau dir mal das $matches-Array an, was dir folgendes RegEx baut:
PHP:
preg_match_all('/\??([^=?]+)=([^&]+)&?/', $a, $matches, PREG_SET_ORDER);
Da steht dann in $matches[x][1] der Name des x-ten Parameters und in $matches[x][2] der Wert dazu. (angefangen bei x=0)
Wenn du das PREG_SET_ORDER weglässt, dann ist $matches[1] ein Array mit allen Namen und $matches[2] eins mit allen Werten, falls dir das besser gefällt (das könntest du zB mit array_combine verwenden).

Aber das was deine Kollege dir da gebaut hat sieht auch net falsch aus, nur bissl aufwändiger.

EDIT:
Was mir gerade eingefallen ist:
PHP:
parse_str(parse_url($URL, PHP_URL_QUERY), $params)
PHP kann das schon ohne dass wir uns da viele Gednaken drum machen ;-)
Wird dann alles in $params geparsed. Siehe parse_str und parse_url
 
Zuletzt bearbeitet:
Was du geschrieben hast ist größtenteils korrekt.
Alle Arrayinformationen werden in $arg verschoben
Das kann man allerdings so nicht sagen, die foreach-Schleife geht jedes Element in $args durch und kopiert das aktuelle Element in $arg.

Was die Funktion zurückgibt ist dann immer ein assoziatives Array der Form Name => Wert zurück.
Auch wenn es nur einen Parameter gibt, gibt es ein solches Array zurück, ob das die Video-ID ist ist egal, die Funktion ist allgemein gehalten und parst dir einfach nur die Argumente in ein Array.

Es kommt also das gleiche dabei raus, wie das was meine Lösung mit den PHP-eigenen Funktionen macht. Diese würde ich bevorzugen, da eingebaute Funktionen meist performanter implementiert sind und auch Sonderfälle behandeln können, die die selbst gebaute Lösung u.U. übersieht.
 
Hey,
Super! Danke :D

Jetzt habe ich das mit dem foreach glaube ich verstanden :)

In der Schule arbeiten wir mit Livecode, eigene Skriptsprache wieder -.-

Da gibts "repeat" also zum Beispiel:
repeat with x=1 to 4
Dann würde er den ompletten Code bis zum Ende des repeats mit x=1 durchführen, anschließend mit x=2 anschließend mit x=3 und zu zuletzt mit x=4
So läuft das mit foreach auch? Nur eben mit den Arraywerten.

:)
 
Das was bei euch eine repeat-Schleife ist, entspricht bei PHP (und vielen anderen Sprachen) wohl eher der for-Schleife, die sieht dann z.B. so aus:
PHP:
for($x = 1; $x <= 4; $x++){
    /* mache was */
}
Die 3 Dinge im Schliefenkopf sind:
1. Initialisierung: $x = 1 => $x wird am Anfang 1 zugewiesen
2. Bedingung: Schleife läuft so lange wie $x <= 4 wahr ist
3. Befehl nach jedem Durchlauf: $x++ => $x wird nach jedem Durchlauf um 1 erhöht

Und das foreach ist, wie du richtig bemerkt hast, eine spezielle Form einer For-Schleife, die das Iterieren über ein Array angenehmer macht.
 
Danke für die wertvollen Tips! :)
Den Gebrauch einer foreach "Schleife" habe ich endlich veratanden. Habs mir vorher ganz anders vorgestellt. Macht mit dieser for Vorstellung natürlich mehr Sinn :)

Kann nur sagen:
Es gibt doch noch nette Klamm User, die nicht nur des Geldes wegen hier sind...vielen Dank :)