Vor kurzem habe ich angefangen, eine Community-Site auf der Yii-Plattform zu erstellen, über die ich in Kürze als Teil meiner Programmierserie Yii2 schreiben werde. Ich wollte das Hinzufügen von Links zu Inhalten auf der Website erleichtern. URLs können zwar leicht in Formulare eingefügt werden, es ist jedoch zeitaufwendig, auch Titel- und Quelleninformationen bereitzustellen.
Im heutigen Tutorial werde ich Ihnen zeigen, wie Sie PHP dazu nutzen können, gängige Metadaten von Webseiten zu bereinigen, um Ihren Benutzern die Teilnahme zu erleichtern und interessantere Dienste zu entwickeln.
Denken Sie daran, ich beteilige mich an den Kommentarthreads unten, also sagen Sie mir, was Sie denken! Sie können mich auch auf Twitter @lookahead_io erreichen.
Zuerst habe ich ein Formular erstellt, in das Benutzer Links einfügen können, indem Sie die URL einfügen. Ich habe auch eine erstellt Sieh nach oben Mit dieser Schaltfläche können Sie mit AJAX anfordern, dass die Webseite nach Metadaten-Informationen durchsucht wird.
Drücken Sieh nach oben nennt das Link :: grab ()
Funktion über Ajax:
$ (document) .on ("click", '[id = lookup] "), Funktion (Ereignis) $ .ajax (url: $ (' # url_prefix '). val () +' / link / grab ', data: url: $ ('# url'). val (), success: function (data) $ ('# title'). val (data); return true;;);
Das Link :: grab ()
Code-Aufrufe fetch_og ()
. Dies ahmt einen Crawler nach, der die Seite erfasst und die Metadaten mit DOMXPath abruft:
öffentliche statische Funktion 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); # Abfrage Metatags mit og Präfix $ metas = $ xpath-> query ('// * / meta [beginnt mit (@eigenschaft, \' og: \ ')]'); $ og = Array (); foreach ($ metas as $ meta) # Eigenschaftsname ohne og erhalten: Präfix $ property = str_replace ('og:', ", $ meta-> getAttribute ('property')); $ content = $ meta-> getAttribute ( 'content'); $ og [$ property] = $ content; return $ og;
Für mein Szenario habe ich das ersetzt og:
Tags oben, aber der folgende Code sucht nach verschiedenen Arten von Tags:
$ tags = Link :: fetch_og ($ url); if (isset ($ tags ['title'])) $ title = $ tags ['title']; else if (isset ($ tags ['metaProperties'] ['og: title'] ['value'])) $ title = $ tags ['metaProperties'] ['og: title'] ['value'] ; else $ title = 'nicht zutreffend'; Rückgabe $ title;
Sie können auch andere Tags wie Schlüsselwörter, Beschreibung usw. verwenden. Die jQuery fügt das Ergebnis dann zum Formular hinzu, das der Benutzer absenden kann:
Ich habe auch eine Tabelle mit Quellen, die ich später weiterentwickeln werde. Grundsätzlich wird jedes Mal, wenn eine neue URL hinzugefügt wird, die Domäne der Basiswebsite analysiert und in eine Quelle
Tabelle:
$ model-> source_id = Source :: add ($ model-> url);… öffentliche statische Funktion add ($ url = ", $ name =") $ source_url = parse_url ($ url); $ url = $ source_url ['host']; $ url = trim ($ url, '\\'); $ s = Source :: find () -> where (['url' => $ url]) -> one (); if (is_null ($ s)) $ s = neue Quelle; $ s-> url = $ url; $ s-> name = $ name; $ s-> status = Source :: STATUS_ACTIVE; $ s-> save (); else if ($ s-> name == ") $ s-> name = $ name; $ s-> update (); Rückgabe von $ s-> id;
Im Moment aktualisiere ich manuell die Namen der Quellen, damit sie für den Benutzer sauber aussehen, z. abc Nachrichten, Boing Boing, und Vice:
Hoffentlich werde ich in einer kommenden Episode überprüfen, wie Sie mithilfe frei verfügbarer APIs den Namen der Site nachschlagen können. Es ist seltsam für mich, dass es dafür kein gemeinsames Metatag gibt. wenn nur das Internet perfekt wäre.
Einige Sites wie die New York Times lassen Sie die Metadaten wegen ihrer Paywalls nicht kratzen. Sie haben aber eine API. Aufgrund der verwirrenden Dokumentation ist es nicht leicht zu lernen, aber ihre Entwickler helfen schnell bei GitHub. Ich hoffe auch, in einer zukünftigen Episode über die Verwendung der Metadatensuche für New York Times-Titel zu schreiben.
Ich hoffe, Sie fanden diesen Leitfaden hilfreich und haben ihn irgendwo in Ihren Projekten eingesetzt. Wenn Sie es in Aktion sehen möchten, können Sie das Web-Scraping auf meiner Website Active Together ausprobieren.
Teilen Sie bitte Ihre Gedanken und Rückmeldungen in den Kommentaren mit. Sie können mich auch immer direkt auf Twitter @lookahead_io erreichen. Schauen Sie sich auch meine Instructor-Seite und meine anderen Serien an: Erstellen Sie Ihr Startup mit PHP und programmieren Sie mit Yii2.