Ett PHP-script som parsar inlägg

Trädvy Permalänk
Medlem
Plats
/home/4rkan/
Registrerad
Sep 2015

Ett PHP-script som parsar inlägg

Hej SweClockers,

Jag letar efter ett forum där man kan fråga efter hjälp med script i PHP eller betala för den hjälpen. Det gäller att parsa inlägg (inkl. kategori, titel, bilder, text samt författare) till en XML-fil som är strukturerat för WordPress, för att sedan kunna importera in och få med allt. Det är bloggar från Blogg.se som är huvudmålet. Men om man kan göra detta med övriga bloggportaler är det guld värt. Men jag antar att det är olika strukturer där och måste anpassa scriptet efter vilken portal vi snackar om.

Hur ska jag gå vidare med detta? Är det möjligt att göra detta? Kan ni som är kunniga i PHP förklara stegen jag måste ta för att skapa detta script, jag är väldigt rookie på PHP.

En gång är ingen gång, två gånger är ett script.

Trädvy Permalänk
Webbutvecklare
Moderator
Plats
::1
Registrerad
Dec 2002
Skrivet av 4rkan:

Hur ska jag gå vidare med detta? Är det möjligt att göra detta? Kan ni som är kunniga i PHP förklara stegen jag måste ta för att skapa detta script, jag är väldigt rookie på PHP.

I PHP kan du använda DOMDocument både för att ladda ner sidan och försöka tolka den som HTML (vill du ha mer kontroll över nedladdningen så kan du sköta det separat via t.ex. file_get_contents() eller curl), och när du väl har ett dokument att arbeta med kan du querya det efter information med hjälp av XPath (DOMXPath). Här finns en del för att komma igång med det: Wikipedia, Get started with XPath, men om du behöver hjälp med förklaringar eller att ta fram rätt frågor så finns det säkert många som kan hjälpa dig här. Olika sidor och portaler kommer naturligtvis ha strukturerat sin HTML på olika sätt, och du kommer behöva hantera dessa separat för att få ut rätt information. När du väl hittat vad du söker skriver du bara uppgifterna till ett annat dokument.

$html = new \DOMDocument(); if($html->loadHTMLFile("http://www.blogg.se")) { $result = new \DOMDocument(); $result->formatOutput = true; $result->appendChild($result->createElement("blogs")); $xpath = new \DOMXPath($html); foreach($xpath->query("//section[@id='largesplash']/article") as $article) { $href = $xpath->evaluate("string(./a[@itemtype='http://schema.org/Article'][@href][1]/@href)", $article); $title = $xpath->evaluate("normalize-space(./a/header/h1)", $article); $author = $xpath->evaluate("normalize-space(./a/span[@itemprop='author']//span[@itemprop='name'])", $article); $style = $xpath->evaluate("normalize-space(./a/div[contains(concat(' ', normalize-space(@class),' '),' image ')]/@style)", $article); $image = ""; $cat = $xpath->evaluate("normalize-space(./div[@itemprop='articleBody']/span[contains(concat(' ', normalize-space(@class),' '),' category ')])", $article); $descr = $xpath->evaluate("normalize-space(./div[@itemprop='articleBody']/node()[preceding-sibling::span[contains(concat(' ', normalize-space(@class),' '),' category ')]])", $article); if(preg_match("/background-image:\surl\('(?P<url>.+)'\)/i", $style, $m)) { $image = $m["url"]; } $blog = $result->createElement("blog"); $blog->appendChild($result->createElement("title", $title)); $blog->appendChild($result->createElement("href", $href)); $blog->appendChild($result->createElement("image", $image)); $blog->appendChild($result->createElement("author", $author)); $blog->appendChild($result->createElement("category", $cat)); $blog->appendChild($result->createElement("description", $descr)); $result->documentElement->appendChild($blog); } echo $result->saveXML(); }

Snabbt exempel

Abstractions all the way down.