<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IOCORE &#187; Programmering</title>
	<atom:link href="http://iocore.se/category/programmering/feed/" rel="self" type="application/rss+xml" />
	<link>http://iocore.se</link>
	<description>C#, PHP, Shell scripts m.m</description>
	<lastBuildDate>Fri, 14 Oct 2011 23:42:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHPLinq</title>
		<link>http://iocore.se/php/phplinq/</link>
		<comments>http://iocore.se/php/phplinq/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 14:46:24 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=70</guid>
		<description><![CDATA[Många är vi som älskar och använder Linq (Language Integrated Query) i .Net. Kort sagt används Linq för att ställa frågor mot dataobjekt, med liknande syntax och funktionalitet som en databas.
Ett snabbt linq-exempel i C# skulle kunna se ut något i stil med:
int&#91;&#93; numbers = &#123; 5, 4, 1, 3, 9, 8, 6, 7, 2, [...]]]></description>
			<content:encoded><![CDATA[<p>Många är vi som älskar och använder Linq (Language Integrated Query) i .Net. Kort sagt används Linq för att ställa frågor mot dataobjekt, med liknande syntax och funktionalitet som en databas.</p>
<p>Ett snabbt linq-exempel i C# skulle kunna se ut något i stil med:</p>
<div class="dean_ch" style="white-space: wrap;">int<span class="br0">&#91;</span><span class="br0">&#93;</span> numbers = <span class="br0">&#123;</span> <span class="nu0">5</span>, <span class="nu0">4</span>, <span class="nu0">1</span>, <span class="nu0">3</span>, <span class="nu0">9</span>, <span class="nu0">8</span>, <span class="nu0">6</span>, <span class="nu0">7</span>, <span class="nu0">2</span>, <span class="nu0">0</span> <span class="br0">&#125;</span>;<br />
<span class="kw2">var</span> lowNums =<br />
&nbsp; &nbsp; from n in numbers<br />
&nbsp; &nbsp; where n &lt; <span class="nu0">5</span><br />
&nbsp; &nbsp; select n;</p>
<p><span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="kw2">var</span> num in lowNums<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; Console.WriteLine<span class="br0">&#40;</span>x<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
<p>vilket är mycket smidigt. Ända tills nu har Linq endast funnits i .NET 3.5, men finns nu som ett bibliotek till PHP. Funktionaliteten är densamma som i .Net, och ett exempel från PHPLinq skulle kunna se ut som följande:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="re0">$numbers</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="nu0">5</span>, <span class="nu0">4</span>, <span class="nu0">1</span>, <span class="nu0">3</span>, <span class="nu0">9</span>, <span class="nu0">8</span>, <span class="nu0">6</span>, <span class="nu0">7</span>, <span class="nu0">2</span>, <span class="nu0">0</span><span class="br0">&#41;</span>; </p>
<p><span class="re0">$lowNums</span>= from<span class="br0">&#40;</span><span class="st0">&#8216;$num&#8217;</span><span class="br0">&#41;</span>-&gt;<span class="me1">in</span><span class="br0">&#40;</span><span class="re0">$numbers</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt;<span class="me1">where</span><span class="br0">&#40;</span><span class="st0">&#8216;$num &lt; 5&#8242;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt;<span class="me1">select</span><span class="br0">&#40;</span><span class="st0">&#8216;$num&#8217;</span><span class="br0">&#41;</span>; </p>
<p><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$lowNums</span> <span class="kw1">as</span> <span class="re0">$num</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$num</span>;<br />
<span class="br0">&#125;</span></div>
<p><strong><a href="http://www.codeplex.com/PHPLinq">PHPLinq</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/php/phplinq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 Alpha äntligen här!</title>
		<link>http://iocore.se/allmant/php-53-alpha/</link>
		<comments>http://iocore.se/allmant/php-53-alpha/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 14:12:46 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=50</guid>
		<description><![CDATA[För nästan exakt en vecka sedan släpptes första alpha-versionen av nya PHP 5.3. Denna version har mycket genemsamt av vad vi kommer att få se i PHP 6, till exempel namnrymder vilket är guld värt för oss som programmerar objektorienterat, men även för er som återanvänder klasser, som kanske råkar heta samma sak. Det är [...]]]></description>
			<content:encoded><![CDATA[<p>För nästan exakt en vecka sedan släpptes första alpha-versionen av nya PHP 5.3. Denna version har mycket genemsamt av vad vi kommer att få se i PHP 6, till exempel <a href="http://se.php.net/language.namespaces">namnrymder </a>vilket är guld värt för oss som programmerar objektorienterat, men även för er som återanvänder klasser, som kanske råkar heta samma sak. Det är enkelt löst med namespaces.</p>
<p>För att deklarera en viss namnrymd skriver man helt enkelt:</p>
<div class="dean_ch" style="white-space: wrap;">
namespace CMS;</p>
<p><span class="kw2">Class</span> User<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">function</span> authenticate<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p>namespace BLOG;</p>
<p><span class="kw2">Class</span> User<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">function</span> authenticate<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
<p>Det innebär att vi skulle kunna deklarera flera klasser med samma namn, så länge de ligger i olika namnrymder. Sedan kan vi anropa dem enligt följande:</p>
<div class="dean_ch" style="white-space: wrap;">
CMS::<span class="me2">User</span>::<span class="me2">authenticate</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
BLOG::<span class="me2">User</span>::<span class="me2">authenticate</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;</div>
<p>eller</p>
<div class="dean_ch" style="white-space: wrap;">
use CMS::<span class="me2">User</span> <span class="kw1">as</span> CMSUser; <br />
use Blog::<span class="me2">User</span> <span class="kw1">as</span> BlogUser; </p>
<p>
<span class="re0">$cmsUser</span> = <span class="kw2">new</span> CMSUser<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="re0">$blogUser</span> = <span class="kw2">new</span> BlogUser<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;</div>
<p>En annan spännande feature i nya PHP-versionen är alternativet att använda mysqlnd istället för libmysql. Fördelen med mysqlnd är att det är bundet med php på c-nivå, istället för libmysql som är löst kopplat, eftersom det kan användas till vilket projekt som helst. Eftersom mysqlnd är kopplat till php på c-nivå följer det även PHPs inbyggda minneslimitering? (memory limit).</p>
<p>Vidare fördelar med mysqlnd är att det inte håller dubbla rader av resultat från en query, vilket framför allt sparar mer minne.</p>
<p>För mer information om mysqlnd rekommenderar jag läsning på <a href="http://forge.mysql.com/wiki/PHP_MYSQLND">PHP-Mysqlnd</a> wikin för projektet.</p>
<p>PHP 5.3 stöder även late static binding, vilket innebär att ärvda klasser också övertar statiska metoder.</p>
<p>Som det är i PHP just nu:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw2">&lt;?php</span><br />
<span class="kw2">Class</span> ParentClass<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="kw2">function</span> Init<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; self::<span class="me2">HelloWorld</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="kw2">function</span> HelloWorld<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Hello world from Parent!&quot;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw2">Class</span> ChildClass <span class="kw2">Extends</span> ParentClass<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="kw2">function</span> HelloWorld<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Hello world from Child!&quot;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p>ChildClass::<span class="me2">Init</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw2">?&gt;</span><br />
&nbsp;</div>
<p>Här kan man absolut förvänta sig att Init() skall skriva ut Hello world from Child!, så är dock inte fallet. Problemet är att PHP med ::self kommer att länka till den klassen där methoden deklarerades.</p>
<p>I PHP 5.3 använder man</p>
<div class="dean_ch" style="white-space: wrap;">
<a href="http://www.php.net/static"><span class="kw3">static</span></a>::<span class="me2">Init</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; istället för self::<span class="me2">Init</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;</div>
<p>Även ett flertal intressanta datumfunktioner är tillagda:</p>
<ul>
<li class="level1">
<div class="li">date_add()</div>
</li>
<li class="level1">
<div class="li">date_sub()</div>
</li>
<li class="level1">
<div class="li">date_diff()</div>
</li>
<li class="level1">
<div class="li">date_parse_from_format()</div>
</li>
<li class="level1">
<div class="li">date_create_from_format()</div>
</li>
<li class="level1">
<div class="li">date_get_last_errors()</div>
</li>
</ul>
<p>samt även motsvarigheten till ucfirst() &#8211; lcfirst().</p>
<p>Något som också är väldigt uppskattat är nya SPL-implementationer:</p>
<p><strong> SPL </strong></p>
<ul>
<li class="level1">
<div class="li"><a class="urlextern" title="http://docs.php.net/manual/en/class.spldoublylinkedlist.php" rel="nofollow" href="http://docs.php.net/manual/en/class.spldoublylinkedlist.php">SplDoublyLinkedList</a></div>
</li>
<li class="level1">
<div class="li"><a class="urlextern" title="http://docs.php.net/manual/en/class.splstack.php" rel="nofollow" href="http://docs.php.net/manual/en/class.splstack.php">SplStack</a></div>
</li>
<li class="level1">
<div class="li"><a class="urlextern" title="http://docs.php.net/manual/en/class.splqueue.php" rel="nofollow" href="http://docs.php.net/manual/en/class.splqueue.php">SplQueue</a></div>
</li>
<li class="level1">
<div class="li"><a class="urlextern" title="http://docs.php.net/manual/en/class.splheap.php" rel="nofollow" href="http://docs.php.net/manual/en/class.splheap.php">SplHeap</a></div>
</li>
<li class="level1">
<div class="li"><a class="urlextern" title="http://docs.php.net/manual/en/class.splminheap.php" rel="nofollow" href="http://docs.php.net/manual/en/class.splminheap.php">SplMinHeap</a></div>
</li>
<li class="level1">
<div class="li"><a class="urlextern" title="http://docs.php.net/manual/en/class.splmaxheap.php" rel="nofollow" href="http://docs.php.net/manual/en/class.splmaxheap.php">SplMaxHeap</a></div>
</li>
<li class="level1">
<div class="li"><a class="urlextern" title="http://docs.php.net/manual/en/class.splpriorityqueue.php" rel="nofollow" href="http://docs.php.net/manual/en/class.splpriorityqueue.php">SplPriorityQueue</a></div>
</li>
<li class="level1">
<div class="li">SplFixedArray</div>
</li>
<li class="level1">
<div class="li">FilesystemIterator</div>
</li>
<li class="level1">
<div class="li">GlobIterator</div>
</li>
<li class="level1">
<div class="li">RecursiveTreeIterator</div>
</li>
<li class="level1">
<div class="li">MultipleIterator</div>
</li>
</ul>
<p>för oss som använder det.</p>
<p>För en fullständig lista på uppdateringar hänvisar jag till <a href="http://cvs.php.net/viewvc.cgi/php-src/NEWS?view=markup&amp;pathrev=PHP_5_3">PHP 5.3  CHANGELOG</a>.</p>
<p>Det som kan tyckas vara negativt med PHP 5.3 är operativsystem äldre än Windows 2000 t.ex Windows 98 inte längre stöds.</p>
<p>Det enda som återstår är nu att alla wamp-xampp-lampp-paket samt webbhotell uppdaterar till 5.3, men det lär väll ta 2-3 år som med alla andra versioner.</p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/php-53-alpha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google translate gadget till Vista sidebar</title>
		<link>http://iocore.se/allmant/google-translate-gadget-till-vista-sidebar/</link>
		<comments>http://iocore.se/allmant/google-translate-gadget-till-vista-sidebar/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 11:23:08 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>
		<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=41</guid>
		<description><![CDATA[Jag är en flitig användare av Google Translate, just för att snabbt kunna bekräfta att ord stavas så man tror. Dock är det enligt mig jobbigt att gå in och välja språk varje gång man vill snabbkolla ett ord.
Av denna anledning sökte jag efter en gadget till Windows Vista, men kunde inte hitta någon. Därför [...]]]></description>
			<content:encoded><![CDATA[<p>Jag är en flitig användare av <a href="http://www.google.com/translate_t">Google Translate</a>, just för att snabbt kunna bekräfta att ord stavas så man tror. Dock är det enligt mig jobbigt att gå in och välja språk varje gång man vill snabbkolla ett ord.</p>
<p>Av denna anledning sökte jag efter en gadget till Windows Vista, men kunde inte hitta någon. Därför slog jag slag i sagen och utevecklade en egen, och tänkte dela med mig den här.</p>
<p><a href="http://iocore.se/wp-content/uploads/2008/08/google_translate.jpg"><img class="alignnone size-medium wp-image-42" title="Google Translate Vista gadget" src="http://iocore.se/wp-content/uploads/2008/08/google_translate.jpg" alt="" width="130" height="150" /></a><br />
<small><em>Google Translate Vista gadget</em></small></p>
<p>För att installera gadgeten zippar ni upp filen nedan, skriv sedan
<pre>%userprofile%\appdata\local\microsoft\windows sidebar\gadgets</pre>
<p> under Start -&gt; Kör, och placera GoogleTranslate under katalogen som dyker upp.</p>
<p>Hoppas den kommer till användning, om ni får problem är det bara att droppa en kommentar!<br />
<strong><br />
<a href="http://iocore.se/wp-content/uploads/2008/08/googletranslategadget.zip">GoogleTranslateGadget</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/google-translate-gadget-till-vista-sidebar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Php, file_get_contents och curl</title>
		<link>http://iocore.se/php/php-file_get_contents-och-curl/</link>
		<comments>http://iocore.se/php/php-file_get_contents-och-curl/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:50:39 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=30</guid>
		<description><![CDATA[Många hävdar att curl är mycket snabbare på att ladda hem dokument från andra webbplatser, andra hävdar motsatsen. Jag personligen har märkt att curl är snabbare och använder därför det uteslutande för att hämta ner andra webbplatser.
Nackdelen är då att curl inte är installerat på alla webbhotell, därför bifogar jag här en mycket enkel funktion [...]]]></description>
			<content:encoded><![CDATA[<p>Många hävdar att curl är mycket snabbare på att ladda hem dokument från andra webbplatser, andra hävdar motsatsen. Jag personligen har märkt att curl är snabbare och använder därför det uteslutande för att hämta ner andra webbplatser.</p>
<p>Nackdelen är då att curl inte är installerat på alla webbhotell, därför bifogar jag här en mycket enkel funktion för att ladda ner dokument, som använder curl om det finns installerat och aktiverat, annars används file_get_contents.</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw2">function</span> get_contents<span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$data</span> = <span class="st0">&quot;&quot;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/function_exists"><span class="kw3">function_exists</span></a><span class="br0">&#40;</span><span class="st0">&quot;curl_init&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ch</span> = curl_init<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>, CURLOPT_HEADER, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>, CURLOPT_RETURNTRANSFER, <span class="nu0">1</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>, CURLOPT_URL, <span class="re0">$url</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$data</span> = curl_exec<span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; curl_close<span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$data</span> = <a href="http://www.php.net/file_get_contents"><span class="kw3">file_get_contents</span></a><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$data</span>;<br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
<p>Simpelt men mycket användbart!</p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/php/php-file_get_contents-och-curl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screen scraping med PHP</title>
		<link>http://iocore.se/php/screen-scraping-med-php/</link>
		<comments>http://iocore.se/php/screen-scraping-med-php/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:28:09 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=16</guid>
		<description><![CDATA[Jag har ofta kommit i situationer där jag, i olika projekt, behöver hämta data och statistik från sidor som inte tillhandahåller rss-feeds. Dessa situationer har jag alltid löst genom att skriva simpla regexp som hämtar det jag vill ha. Detta är dock ofta tidsödande och väldigt krävande för systemet som skall interprera scriptet.
Nu har jag [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har ofta kommit i situationer där jag, i olika projekt, behöver hämta data och statistik från sidor som inte tillhandahåller rss-feeds. Dessa situationer har jag alltid löst genom att skriva simpla regexp som hämtar det jag vill ha. Detta är dock ofta tidsödande och väldigt krävande för systemet som skall interprera scriptet.</p>
<p>Nu har jag dock hittat ett verktyg för att stega igenom dokumentmodellen på en webbplats, nämligen <a title="PHP Simle HTML Dom Parser" href="http://simplehtmldom.sourceforge.net/">PHP Simple HTML DOM Parser</a>. Verktyget fungerar väldigt tillfredsställande och använder en syntax liknande <a href="http://www.jquery.com/">jQuery</a>.</p>
<p>Vad är det då som skiljer ovan nämnda verktyg från de andra som finns?</p>
<p>Jo en för mig avgörande skillnad är att det stöder icke-korrekta htmldokument. Detta innebär att du kan parsa i princip vilken sida som helst.</p>
<p>För att t.ex. hämta ut alla sökresultat på google för ett visst sökord gör vi enligt följande:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw1">require_once</span> <span class="st0">&quot;simple_html_dom.php&quot;</span>; <span class="co1">// Inkludera PHP Simple HTML Dom</span><br />
<span class="re0">$keyword</span> = <span class="st0">&quot;iocore&quot;</span>; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Sökordet vi vill söka efter</span></p>
<p><span class="re0">$html</span> = file_get_html<span class="br0">&#40;</span><span class="st0">&quot;http://www.google.se/search?hl=sv&amp;amp;q=&quot;</span> . <span class="re0">$keyword</span><span class="br0">&#41;</span>; <span class="co1">// Hämta ner sidan och gör det till ett simple_html_dom-objekt</span></p>
<p><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$html</span>-&gt;<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;h2&quot;</span><span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$h2</span><span class="br0">&#41;</span> <span class="co1">//Hämta alla h2-element</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$h2</span>-&gt;<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;a&quot;</span><span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$link</span><span class="br0">&#41;</span> <span class="co1">// Hämta alla a-element med h2 som förälder</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$link</span>-&gt;<span class="me1">href</span>; <span class="co1">// Skriv ut href-attributet på funna a-element</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
<p>svårare än så är det inte!</p>
<p>Det var allt för nu, håll utkik efter mer användbara kodsnuttar här på IoCore!</p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/php/screen-scraping-med-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

