{"id":584,"date":"2013-10-17T19:59:46","date_gmt":"2013-10-17T16:59:46","guid":{"rendered":"http:\/\/www.gencnesil.org\/?p=584"},"modified":"2014-04-02T00:59:26","modified_gmt":"2014-04-01T21:59:26","slug":"php-bot-yapimi-bot-ile-veri-cekme","status":"publish","type":"post","link":"https:\/\/gncz.net\/index.php\/php-bot-yapimi-bot-ile-veri-cekme.html","title":{"rendered":"PHP Bot Yap\u0131m\u0131 &#8211; Bot ile veri \u00e7ekme"},"content":{"rendered":"<p>\u0130nternette otomatik olarak programland\u0131klar\u0131 ama\u00e7 \u00fczerine bir \u00e7ok adrese ve i\u00e7eri\u011fe ula\u015f\u0131p de\u011ferlendiren, kullanan, saklayan veya yay\u0131nlayan inter robotlar\u0131na bot denir.<\/p>\n<p>PHP\u2019de bot yapmak gayet basit ve e\u011flencelidir. G\u00fcn\u00fcm\u00fczde en \u00e7ok ba\u015fka sitelerden i\u00e7erik (\u00e7)almak amac\u0131yla kullan\u0131lan botlar bir \u00e7ok i\u015fe yarar ve harika fonksiyonlar\u0131 vard\u0131r.<\/p>\n<p>\u00d6rne\u011fin meteoroloji sitesinden bir PHP botu yard\u0131m\u0131yla hava durumu bilgilerini veya borsa sitelerinden d\u00f6viz kurlar\u0131n\u0131 \u00e7ekip kendi sitenizde en g\u00fcncel \u015fekilde yay\u0131nlayabilirsiniz.<\/p>\n<p>PHP ile site i\u00e7eriklerine ula\u015fmak<\/p>\n<p>Bu i\u015fi yapmak i\u00e7in en basitinden file_get_contents() fonksiyonuna sahibiz. \u0130\u00e7erisine yazazaca\u011f\u0131m\u0131z ilk parametredeki adrese girip kayna\u011f\u0131 bir de\u011fi\u015fkene y\u00fcklememizi ya da ekrana yazd\u0131rmam\u0131z\u0131 sa\u011flar.<\/p>\n<blockquote>\n<pre class=\"lang:default decode:true\">$site = \"http:\/\/www.gncz.net\"; $icerik = file_get_contents($site); echo $icerik;<\/pre>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Bu \u00f6rne\u011fi \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda file_get_contents() fonksiyonu sayesinde http:\/\/www.phpr.org adresine girip sitenin kayna\u011f\u0131na ula\u015f\u0131p o kayna\u011f\u0131 ekrana yazd\u0131rd\u0131k.<\/p>\n<p>Sitelere ula\u015fman\u0131n bir ba\u015fka yolu yolu ise curl fonksiyonlar\u0131d\u0131r. Curl fonksiyonlar\u0131 sayesinde bir adrese girmekle kalmay\u0131p ayn\u0131 zamanda girilen adrese form verileri g\u00f6nderebiliriz ve kullan\u0131c\u0131 giri\u015fi yapabiliriz. Yani PHP\u2019de curl sayesinde sitelere ayn\u0131 bir ger\u00e7ek kullan\u0131c\u0131ym\u0131\u015f gibi, bir browserda gezer gibi girebiliriz.<\/p>\n<p>Benim haz\u0131rlam\u0131\u015f oldu\u011fum curl fonksiyonu ile istedi\u011finiz adrese POST metodunda veri g\u00f6nderebilirsiniz:<\/p>\n<blockquote>\n<pre class=\"lang:default decode:true \">function curl($url, $post=false)\r\n{\r\n$user_agent = 'Mozilla\/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.0.6) Gecko\/2009011913 Firefox\/3.0.6';\r\n$ch = curl_init();\r\ncurl_setopt($ch, CURLOPT_URL, $url);\r\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\r\ncurl_setopt($ch, CURLOPT_POST, $post ? true : false);\r\ncurl_setopt($ch, CURLOPT_POSTFIELDS, $post ? $post : false);\r\ncurl_setopt($ch, CURLOPT_USERAGENT, $user_agent);\r\n$icerik = curl_exec($ch);\r\ncurl_close($ch);\r\nreturn $icerik;\r\n}<\/pre>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Bu fonksiyonu ayn\u0131 file_get_contents fonksiyonu gibi kullanabilirsiniz. E\u011fer bir post verisi g\u00f6nderecekseniz 2. parametreyi \u201ckullanici=musa&amp;sifre=123456\u2033 \u015feklinde kullanman\u0131z gerekecek.<\/p>\n<blockquote>\n<pre class=\"lang:default decode:true\">echo curl(\"http:\/\/www.gncz.net\/wp-login.php\", \"user_login=kullanici&amp;user_pass=sifre\");<\/pre>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Bu \u00f6rnek kullan\u0131mda kendi sitemizin paneline giri\u015f yapmak i\u00e7in kullan\u0131c\u0131 ad\u0131 ve \u015fifremizi postlam\u0131\u015f olduk. Do\u011fru bilgileri yazd\u0131\u011f\u0131m\u0131zda curl fonksiyonu sayesinde PHP \u00fczerinden panelimize de ula\u015fabiliriz.<br \/>\nPHP botu ile belirli i\u00e7erikleri alma<\/p>\n<p>Sitelerin i\u00e7eriklerine direkt olarak ula\u015ft\u0131ktan sonra istedi\u011fimiz k\u0131s\u0131mdaki de\u011feri ve i\u00e7eri\u011fi almak i\u00e7in \u00f6ncelikle bir ara belirlemeliyiz. Sitenin kaynak kodunu inceleyip ay\u0131rt edici bir aral\u0131k bulmal\u0131y\u0131z.<\/p>\n<p>Ben \u00f6rnek bir i\u00e7erik sunaca\u011f\u0131m, ve bu \u00f6rnek i\u00e7erikten istedi\u011fimiz k\u0131sm\u0131 alaca\u011f\u0131z. Metereoloji sitesinin \u0130stanbul i\u00e7in verdi\u011fi sonu\u00e7lar\u0131n bulundu\u011fu k\u0131sm\u0131n kaynak kodu a\u015fa\u011f\u0131daki gibi:<\/p>\n<blockquote>\n<pre class=\"lang:default decode:true \">&lt;tr&gt;\r\n&lt;th id=\"ctl00_mpBody_thmGun1\"&gt;20 Haziran Pazar&lt;\/th&gt;\r\n&lt;td id=\"ctl00_mpBody_thmMin1\"&gt;21&lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_thmMax1\"&gt;30&lt;\/td&gt;\r\n&lt;td&gt;&lt;img id=\"ctl00_mpBody_imgHadise1\" title=\"PAR\u00c7ALI BULUTLU\" src=\"..\/FILES\/imgIcon\/99\/a1-25x25-gif\/-25.gif\" alt=\"PAR\u00c7ALI BULUTLU\" style=\"border-width:0px;\" \/&gt;&lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_thmNemMin1\"&gt;59&lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_thmNemMax1\"&gt;93&lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_thmRuzgarYon1\"&gt;&lt;img src=\"..\/FILES\/imgIcon\/ruzgar\/1\/1.gif\" alt=\"Kuzeydo\u011fudan\" title=\"Kuzeydo\u011fudan\" \/&gt; &lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_thmRuzgarHiz1\"&gt;18&lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_gcmMin1\"&gt;11.4&lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_gcmMax1\"&gt;32.2&lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_gcmMinOrt1\"&gt;16.7&lt;\/td&gt;\r\n&lt;td id=\"ctl00_mpBody_gcmMaxOrt1\"&gt;25.5&lt;\/td&gt;\r\n&lt;\/tr&gt;<\/pre>\n<p>&nbsp;<\/p><\/blockquote>\n<p>\u00c7ok kar\u0131\u015f\u0131k bir kaynak kodu gibi g\u00f6r\u00fcn\u00fcyor ama asl\u0131nda tam bizim arad\u0131\u011f\u0131m\u0131z gibi bir sonu\u00e7. Farkettiyseniz t\u00fcm de\u011ferler ay\u0131rt edilebilecek belli baz\u0131 elementlerin aras\u0131nda. \u00d6rne\u011fin tarih class=\u201darkaTrh\u201d&gt; ile &lt;\/td&gt; aras\u0131nda.<\/p>\n<p>Bir i\u00e7erikte istedi\u011fimiz aral\u0131\u011f\u0131 almak i\u00e7in yine curl gibi haz\u0131r bir fonksiyon kullanaca\u011f\u0131z. Bu fonksiyonu kopyala-yap\u0131\u015ft\u0131r yaparak sizde kullanabilirsiniz.<\/p>\n<blockquote>\n<pre class=\"lang:default decode:true \">function ara($bas, $son, $yazi)\r\n{\r\n@preg_match_all('\/' . preg_quote($bas, '\/') .\r\n'(.*?)'. preg_quote($son, '\/').'\/i', $yazi, $m);\r\nreturn @$m[1];\r\n}<\/pre>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Bu ara fonksiyonuda basit bir \u015fekilde aral\u0131k i\u00e7erisindeki de\u011feri bize verir. Kullan\u0131m\u0131 i\u00e7in 3 parametre vard\u0131r. \u0130lk parametre aral\u0131\u011f\u0131n ba\u015f\u0131, ikinci parametre aral\u0131\u011f\u0131n sonu, \u00fc\u00e7\u00fcnc\u00fc parametre ise ara\u015ft\u0131r\u0131lacak i\u00e7erik.<\/p>\n<blockquote>\n<pre class=\"lang:default decode:true  crayon-selected\">$icerik = file_get_contents(\"http:\/\/www.gncz.net\");\r\n$baslik = ara(\"&lt;title&gt;\", \"&lt;\/title&gt;\", $icerik);\r\necho $baslik[0];<\/pre>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Bu \u00f6rnekte sitemizin kaynak kodlar\u0131na ula\u015f\u0131p &lt;title&gt;\u2026&lt;\/title&gt; aras\u0131n\u0131 yani sitemizin ba\u015fl\u0131\u011f\u0131n\u0131 alm\u0131\u015f olduk ve ekrana yazd\u0131rd\u0131k. De\u011ferin y\u00fcklendi\u011fi de\u011fi\u015fkene [0] dememizin sebebi ilk yakalanan aral\u0131\u011f\u0131 almam\u0131z. E\u011fer benzer aral\u0131klardan daha fazla var ise onlar\u0131da dizinin di\u011fer elemanlar\u0131 olarak ekleyecektir. \u00d6rne\u011fin birden fazla title aral\u0131\u011f\u0131 olsayd\u0131 di\u011fer sonu\u00e7larda [1], [2] \u015feklinde di\u011fer dizilere s\u0131ralanacakt\u0131.<\/p>\n<p>Gelelim bu fonksiyonu bahsetti\u011fimiz meteroloji sitesinde uygulamaya:<\/p>\n<blockquote>\n<pre class=\"lang:default decode:true \">$site = \"http:\/\/www.meteor.gov.tr\/tahmin\/il-ve-ilceler.aspx?m=ISTANBUL\";\r\n$icerik = file_get_contents($site);\r\n$alt_sicaklik = ara('class=\"minS\"&gt;', '&lt;\/td&gt;', $icerik);\r\n$ust_sicaklik = ara('class=\"maxS\"&gt;', '&lt;\/td&gt;', $icerik);\r\necho '\u0130stanbul hava durumu: ' . $ust_sicaklik[0] . '\/' . $alt_sicaklik[0];<\/pre>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Sitede alt ve \u00fcst s\u0131cakl\u0131klar\u0131n bulundu\u011fu de\u011ferlerin aral\u0131\u011f\u0131n\u0131 bulup ara fonksiyonumuz sayesinde aral\u0131\u011f\u0131 al\u0131p ekrana yazd\u0131rd\u0131k. Sonu\u00e7 olarak ekranda \u0130stanbul hava durumu: 21\/30 \u015feklinde bir \u00e7\u0131kt\u0131 alaca\u011f\u0131z.<\/p>\n<p>K\u0131saca bot i\u00e7erik alma mant\u0131\u011f\u0131 sitelerdeki i\u00e7eriklerin ay\u0131rt edici aral\u0131klar\u0131n\u0131 bulup o k\u0131sm\u0131 almaya dayanmaktad\u0131r. Bunlar\u0131n d\u0131\u015f\u0131nda hayal g\u00fcc\u00fcn\u00fcz\u00fc kullanarak daha bir \u00e7ok mant\u0131k \u00fcretebilir ve her t\u00fcrl\u00fc i\u00e7eri\u011fe ula\u015f\u0131p diledi\u011finiz botlar\u0131 kodlayabilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0130nternette otomatik olarak programland\u0131klar\u0131 ama\u00e7 \u00fczerine bir \u00e7ok adrese ve i\u00e7eri\u011fe ula\u015f\u0131p de\u011ferlendiren, kullanan, saklayan veya yay\u0131nlayan inter robotlar\u0131na bot denir. PHP\u2019de bot yapmak gayet basit ve e\u011flencelidir. G\u00fcn\u00fcm\u00fczde en \u00e7ok ba\u015fka sitelerden i\u00e7erik (\u00e7)almak amac\u0131yla kullan\u0131lan botlar bir \u00e7ok i\u015fe yarar ve harika fonksiyonlar\u0131 vard\u0131r. \u00d6rne\u011fin meteoroloji sitesinden bir PHP botu yard\u0131m\u0131yla hava durumu bilgilerini veya borsa sitelerinden d\u00f6viz<a class=\"more-link\" href=\"https:\/\/gncz.net\/index.php\/php-bot-yapimi-bot-ile-veri-cekme.html\">[Devam\u0131n\u0131 Oku&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":761,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20],"tags":[],"_links":{"self":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/584"}],"collection":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/comments?post=584"}],"version-history":[{"count":5,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/584\/revisions"}],"predecessor-version":[{"id":1083,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/posts\/584\/revisions\/1083"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/media\/761"}],"wp:attachment":[{"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/media?parent=584"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/categories?post=584"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gncz.net\/index.php\/wp-json\/wp\/v2\/tags?post=584"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}