REKLAM ALANI

PHP botu ile belirli içerikleri alma

avatar TRWebmaster
Aktif Üye
216
#1
Yorumu Paylaş

Sitelerin içeriklerine direkt olarak ulaştıktan sonra istediğimiz kısımdaki değeri ve içeriği almak için öncelikle bir ara belirlemeliyiz. Sitenin kaynak kodunu inceleyip ayırt edici bir aralık bulmalıyız.
 
Ben örnek bir içerik sunacağım, ve bu örnek içerikten istediğimiz kısmı alacağız. Metereoloji sitesinin İstanbul için verdiği sonuçların bulunduğu kısmın kaynak kodu aşağıdaki gibi:
PHP Kod:
<tr>
    <th id="ctl00_mpBody_thmGun1" class="arkaTrh">20 Haziran Pazar</th>
    <td id="ctl00_mpBody_thmMin1" class="minS">21</td>
    <td id="ctl00_mpBody_thmMax1" class="maxS">30</td>
    <td><img id="ctl00_mpBody_imgHadise1" title="PARÇALI BULUTLU" src="../FILES/imgIcon/99/a1-25x25-gif/-25.gif" alt="PARÇALI BULUTLU" style="border-width:0px;" /></td>
    <td id="ctl00_mpBody_thmNemMin1" class="minN">59</td>
    <td id="ctl00_mpBody_thmNemMax1" class="maxN">93</td>
    <td id="ctl00_mpBody_thmRuzgarYon1"><img src="../FILES/imgIcon/ruzgar/1/1.gif" alt="Kuzeydoğudan" title="Kuzeydoğudan" /> </td>
    <td id="ctl00_mpBody_thmRuzgarHiz1">18</td>
    <td id="ctl00_mpBody_gcmMin1" class="arkaGcm minSgcm">11.4</td>
    <td id="ctl00_mpBody_gcmMax1" class="arkaGcm maxSgcm">32.2</td>
    <td id="ctl00_mpBody_gcmMinOrt1" class="arkaGcm minSgcm">16.7</td>
    <td id="ctl00_mpBody_gcmMaxOrt1" class="arkaGcm maxSgcm">25.5</td>
</
tr

Çok karışık bir kaynak kodu gibi görünüyor ama aslında tam bizim aradığımız gibi bir sonuç. Farkettiyseniz tüm değerler ayırt edilebilecek belli bazı elementlerin arasında. Örneğin tarih class=”arkaTrh”> ile </td> arasında.
 
Bir içerikte istediğimiz aralığı almak için yine curl gibi hazır bir fonksiyon kullanacağız. Bu fonksiyonu kopyala-yapıştır yaparak sizde kullanabilirsiniz.
 
PHP Kod:
function ara($bas$son$yazi)
{
    @preg_match_all('/' preg_quote($bas'/') .
    '(.*?)'preg_quote($son'/').'/i'$yazi$m);
    return @$m[1];


Bu ara fonksiyonuda basit bir şekilde aralık içerisindeki değeri bize verir. Kullanımı için 3 parametre vardır. İlk parametre aralığın başı, ikinci parametre aralığın sonu, üçüncü parametre ise araştırılacak içerik.
 
Kod:
$icerik = file_get_contents("//www.phpr.org");
$baslik = ara("<title>", "</title>", $icerik);
echo $baslik[0];

Bu örnekte sitemizin kaynak kodlarına ulaşıp <title>…</title> arasını yani sitemizin başlığını almış olduk ve ekrana yazdırdık. Değerin yüklendiği değişkene [0] dememizin sebebi ilk yakalanan aralığı almamız. Eğer benzer aralıklardan daha fazla var ise onlarıda dizinin diğer elemanları olarak ekleyecektir. Örneğin birden fazla title aralığı olsaydı diğer sonuçlarda [1], [2] şeklinde diğer dizilere sıralanacaktı.
 
Gelelim bu fonksiyonu bahsettiğimiz meteroloji sitesinde uygulamaya:
PHP Kod:
$site "http://www.meteor.gov.tr/tahmin/il-ve-ilceler.aspx?m=ISTANBUL";
$icerik file_get_contents($site);
$alt_sicaklik ara('class="minS">''</td>'$icerik);
$ust_sicaklik ara('class="maxS">''</td>'$icerik);
echo 
'İstanbul hava durumu: ' $ust_sicaklik[0] . '/' $alt_sicaklik[0]; 

Sitede alt ve üst sıcaklıkların bulunduğu değerlerin aralığını bulup ara fonksiyonumuz sayesinde aralığı alıp ekrana yazdırdık. Sonuç olarak ekranda İstanbul hava durumu: 21/30 şeklinde bir çıktı alacağız.
 
Kısaca bot içerik alma mantığı sitelerdeki içeriklerin ayırt edici aralıklarını bulup o kısmı almaya dayanmaktadır. Bunların dışında hayal gücünüzü kullanarak daha bir çok mantık üretebilir ve her türlü içeriğe ulaşıp dilediğiniz botları kodlayabilirsiniz.

Bir başka PHP serüveninde görüşmek üzere hoşçakalın.
deneme
Aktif Üye

Konuda Ara

0 Yorum


Konuyu Okuyanlar: