Récemment, j'ai commencé à construire un site communautaire au-dessus de la plate-forme Yii, sur laquelle je vais bientôt écrire dans le cadre de ma série Programming With Yii2. Je voulais faciliter l'ajout de liens liés au contenu du site. Bien qu'il soit facile de coller des URL dans des formulaires, il est également fastidieux de fournir des informations sur le titre et la source..
Dans le tutoriel d'aujourd'hui, je vais vous montrer comment utiliser PHP pour extraire des métadonnées communes de pages Web afin de faciliter la participation de vos utilisateurs et de créer des services plus intéressants..
N'oubliez pas que je participe aux commentaires ci-dessous, alors dites-moi ce que vous en pensez! Vous pouvez également me joindre sur Twitter @lookahead_io.
Tout d'abord, j'ai créé un formulaire permettant aux utilisateurs d'ajouter des liens en collant l'URL. J'ai aussi créé un Chercher bouton pour utiliser AJAX pour demander que la page Web soit récupérée pour obtenir des informations de métadonnées.
Pressage Chercher appelle le Link :: grab ()
fonction via ajax:
$ (document) .on ("clic", '[id = recherche]', fonction (événement) $ .ajax (url: $ ('# url_prefix'). val () + '/ link / grab', data: url: $ ('# url'). val (), succès: fonction (data) $ ('# title'). val (data); return (;););
le Link :: grab ()
appels de code fetch_og ()
. Cela imite un robot d'exploration pour capturer la page et obtenir les métadonnées avec DOMXPath:
Fonction statique publique fetch_og ($ url) $ options = array ('http' => array ('user_agent' => 'facebookexternalhit / 1.1')); $ context = stream_context_create ($ options); $ data = file_get_contents ($ url, false, $ context); $ dom = new \ DomDocument; @ $ dom-> loadHTML ($ data); $ xpath = new \ DOMXPath ($ dom); # metatags de requête avec le préfixe og $ metas = $ xpath-> query ('// * / meta [commence-avec (@propriété, \' og: \ ')]'); $ og = array (); foreach ($ metas as $ meta) # get nom de propriété sans og: préfixe $ property = str_replace ('og:', ", $ meta-> getAttribute ('propriété')); $ content = $ meta-> getAttribute ( 'content'); $ og [$ property] = $ content; return $ og;
Pour mon scénario, j'ai remplacé le og:
balises ci-dessus, mais le code ci-dessous recherche différents types de balises:
$ tags = Link :: fetch_og ($ url); if (isset ($ tags ['title']))) $ title = $ tags ['title']; else if (isset ($ tags ['métaProperties']] ['og: titre'] ['valeur'])) $ title = $ tags ['métaProperties'] ['og: titre'] ['valeur'] ; else $ title = 'n / a'; return $ title;
Vous pouvez également saisir d'autres balises, telles que des mots-clés, une description, etc. Le jQuery ajoute ensuite le résultat au formulaire pour que l'utilisateur l'envoie:
J'ai aussi un tableau de sources que je développerai plus tard. Mais fondamentalement, chaque fois qu’une nouvelle URL est ajoutée, nous l’analysons pour le domaine de site Web de base et nous la plaçons dans un fichier. La source
table:
$ model-> source_id = Source :: add ($ model-> url);… fonction statique publique add ($ url = ", $ name =") $ source_url = parse_url ($ url); $ url = $ source_url ['hôte']; $ url = trim ($ url, '\\'); $ s = Source :: find () -> où (['url' => $ url]) -> un (); if (is_null ($ s)) $ s = nouvelle source; $ s-> url = $ url; $ s-> nom = $ nom; $ s-> status = Source :: STATUS_ACTIVE; $ s-> save (); else if ($ s-> nom == ") $ s-> nom = $ nom; $ s-> update (); retour $ s-> id;
Pour le moment, je mets à jour manuellement les noms des sources afin qu'elles soient propres à l'utilisateur, par exemple. ABC Nouvelles, Boing Boing, et Vice:
J'espère que dans un prochain épisode, je vais expliquer comment utiliser les API librement disponibles pour rechercher le nom du site. C'est étrange pour moi, il n'y a pas de métabalise commune pour cela; si seulement Internet était parfait.
Certains sites tels que The New York Times ne vous laissent pas gratter les métadonnées à cause de leurs paywalls. Mais ils ont une API. Ce n'est pas facile à apprendre à cause de la documentation déroutante, mais leurs développeurs sont prompts à aider sur GitHub. J'espère aussi écrire sur l'utilisation de la recherche de métadonnées pour les titres du New York Times dans un futur épisode..
J'espère que vous avez trouvé ce guide utile et que vous l'utilisez quelque part dans vos projets. Si vous souhaitez le voir en action, vous pouvez essayer une partie de la récupération Web sur mon site, Active Together.
S'il vous plaît, partagez vos pensées et vos commentaires dans les commentaires. Vous pouvez également toujours me joindre directement sur Twitter @lookahead_io. Et assurez-vous de consulter ma page d’instructeur et mes autres séries, Construire sa startup avec PHP et Programmer avec Yii2.