oEmbed client functies

Door Jelmer -, 13 jaar geleden, 4.805x bekeken

Hulpfunctie om oembed data voor een webpagina te achterhalen.

oEmbed wordt door een aantal websites zoals youtube en vimeo ondersteunt als universele manier voor embedden. De webpagina zelf bevat dan een link naar een API waar je de data zoals url en afmetingen uit kan halen.

Als de site zelf nog niet oEmbed data aanbiedt probeert dit script embed.ly om alsnog de data te krijgen.

Omdat het ophalen van deze info best traag is raad ik aan om het resultaat samen met de oorspronkelijke url op te slaan zodat je het alleen opnieuw hoeft op te halen als de data die je al had opgehaald niet meer klopt.

Zie het voorbeeld voor gebruik en voor voorbeeld-data. Mijn ervaring is dat het het makkelijkst is om html te genereren op basis het 'type' attribuut dat je terug krijgt. Of als je de bron vertrouwt en het 'html' attribuut terug krijgt, is dat de meest betrouwbare oplossing.

Gesponsorde koppelingen

PHP script bestanden

  1. oembed.php
  2. voorbeeld.php

 

Er zijn 4 reacties op 'Oembed client functies'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Pim -
Pim -
13 jaar geleden
 
0 +1 -0 -1
Mooi hoor. Weer wat geleerd.

Een paar vraagjes:
Waarom noem je het argument $video_url, terwijl het helemaal niet om een video hoeft te gaan?

Hoe ga je om met diensten die niet door Embedly worden ondersteund? Moet je daarbij niet false teruggeven?

Waarom geef je een object en geen array terug?

En wat bedoel je met de laatste alinea van de inleiding?
Jelmer -
Jelmer -
13 jaar geleden
 
0 +1 -0 -1
$video_url is nog iets wat is achtergebleven. Ik heb het script oorspronkelijk gemaakt om youtube en vimeo te kunnen embedden, maar het werkt voor meer sites.

Volgens mij faalt file_get_contents op diensten die embed.ly niet ondersteunt. Daardoor zou hij uiteindelijk ook dan false terug moeten geven.

Ik geef een object terug omdat ik zelf graag arrays als lijsten en objecten als datastructuren, structs zeg maar, gebruik. En je kan, als je heel zeker van je zaak bent, oembeg_get_data(...)->html :)

Welke data een oembed api teruggeeft staat niet helemaal vast. Volgens mij is een property 'type' verplicht (maar ik controleer er niet op) en op basis daarvan zijn weer andere properties verplicht. Op basis van $response->type kan je gemakkelijk een switch-statement maken om de html te genereren. Sommige types, zoals video hebben ook een 'html' property welke de html code voor embedden bevat. Zie ook de oEmbed specificaties hierover.

Met die 'html' property zou ik wel wat oppassen. Zo lang je zelf alleen maar van sites embed die je vertrouwt, zal het niet veel kwaad kunnen maar zou je het gebruiken voor een forum, dan is het een mooie opening voor cross-site scripting. In het meest ideale geval haal je er html-purifier overheen, in iets minder ideaal geval geeft de API naast 'html' ook een directe link naar de video zodat je je eigen embed-html kan schrijven. Nadeel daarvan is dan wel weer dat een aantal sites slimmer is, en je niet embed-html geeft maar een iframe, zodat de site zelf kan bepalen of ze bijv. <video> of flash gebruiken.
Pim -
Pim -
13 jaar geleden
 
0 +1 -0 -1
Aha
Misschien is een OOP abstractie voor de verschillende gespecificeerde types mooi.

En cURL voor wat snelheid?

En eventueel ondersteuning voor API endpoints die niet uit links komen maar door de gebruiker zijn opgegeven?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Niels K
Niels K
13 jaar geleden
 
0 +1 -0 -1
Cool jelmer, heel mooi script.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. oembed.php
  2. voorbeeld.php

Labels

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.