Forumda yenilikler devam etmektedir , çalışmalara devam ettiğimiz kısa süre içerisinde güzel bir görünüme sahip olduk daha iyisi için lütfen çalışmaların bitmesini bekleyiniz. Tıkla ve Git
x

PHP bot Yapma

admin

(¯´•._.• Webmaster •._.•´¯)
Yönetici
Modaratör
Katılım
Ara 27, 2022
Mesajlar
212
Etkileşim
3,891
Puan
0
Yaş
35
Konum
Adana
Web sitesi
forumdas.com.tr
F-D Coin
3,886
İnternette otomatik olarak programlandıkları amaç üzerine bir çok adrese ve içeriğe ulaşıp değerlendiren, kullanan, saklayan veya yayınlayan inter robotlarına bot denir.

PHP’de bot yapmak gayet basit ve eğlencelidir. Günümüzde en çok başka sitelerden içerik (ç)almak amacıyla kullanılan botlar bir çok işe yarar ve harika fonksiyonları vardır.

Örneğin meteoroloji sitesinden bir PHP botu yardımıyla hava durumu bilgilerini veya borsa sitelerinden döviz kurlarını çekip kendi sitenizde en güncel şekilde yayınlayabilirsiniz.



PHP ile site içeriklerine ulaşmak​

Bu işi yapmak için en basitinden file_get_contents() fonksiyonuna sahibiz. İçerisine yazazacağımız ilk parametredeki adrese girip kaynağı bir değişkene yüklememizi ya da ekrana yazdırmamızı sağlar.

1
2
3
Kod:
$site = "//forumdas.com.tr";
$icerik = file_get_contents($site);
echo $icerik;
Bu örneği çalıştırdığımızda
Kod:
file_get_contents()
fonksiyonu sayesinde //forumdas.com.tr adresine girip sitenin kaynağına ulaşıp o kaynağı ekrana yazdırdık.

Sitelere ulaşmanın bir başka yolu yolu ise curl fonksiyonlarıdır. Curl fonksiyonları sayesinde bir adrese girmekle kalmayıp aynı zamanda girilen adrese form verileri gönderebiliriz ve kullanıcı girişi yapabiliriz. Yani PHP’de curl sayesinde sitelere aynı bir gerçek kullanıcıymış gibi, bir browserda gezer gibi girebiliriz.

Benim hazırlamış olduğum curl fonksiyonu ile istediğiniz adrese POST metodunda veri gönderebilirsiniz:

1
2
3
4
5
6
7
8
9
10
11
12
13
Kod:
function curl($url, $post=false)
{
    $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, $post ? true : false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post ? $post : false);
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    $icerik = curl_exec($ch);
    curl_close($ch);
    return $icerik;
}
Bu fonksiyonu aynı file_get_contents fonksiyonu gibi kullanabilirsiniz. Eğer bir post verisi gönderecekseniz 2. parametreyi “kullanici=musa&sifre=123456” şeklinde kullanmanız gerekecek.

1
Kod:
echo curl("//www.phpr.org/wp-login.php", "user_login=kullanici&user_pass=sifre");
Bu örnek kullanımda kendi sitemizin paneline giriş yapmak için kullanıcı adı ve şifremizi postlamış olduk. Doğru bilgileri yazdığımızda curl fonksiyonu sayesinde PHP üzerinden panelimize de ulaşabiliriz.

PHP botu ile belirli içerikleri alma​

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.

1
2
3
4
5
6
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.

1
2
3
Kod:
$icerik = file_get_contents("//forumdas.com.tr");
$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:

1
2
3
4
5
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.
 

Similar threads

PHP ile API çekmek için `curl` veya `file_get_contents` gibi fonksiyonları kullanabilirsiniz. İşte her iki yöntemin örnek kullanımları: 1. `curl` kullanarak API çekme: ```php $url = 'https://api.example.com/endpoint'; $curl = curl_init($url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true)...
Cevaplar
1
Görüntüleme
280
PHP çalışmalarında kullanabileceğin işe yarar ve alternatif fonksiyonlarla tanışmaya hazır mısın? İçerikleri detaylı yönetmek, tarih saat yazdırmak, bir PHP dosyasına farklı dosyalar dahil etmek, rastgele rakamlar üretmek ve daha bir çok alanda işlemler yapmamızı sağlayan birbirinden acayip...
Cevaplar
0
Görüntüleme
492
  • Kilitli
api kaynak kodum var buraya atacağım <?php header('Content-Type: text/html; charset=utf-8'); include_once 'includes/baglan.php'; session_start(); if ($_SESSION['GET_USER_SSID'] == "") {     header('Location: auth/auth-login'); } $GET_SESSION_TOKEN = $_SESSION['GET_USER_SSID']...
Cevaplar
0
Görüntüleme
115
PHP sabitleri yapacağın çalışmalarda adı üstünde değişken olmayacak, çalışma boyunca hiç değiştirilmeden sabit kalacak değerleri tanımlaman için kullanılır. Ayrıca sabitler sadece bir kez tanımlanıp bir daha değiştirilemediği için güvenlidir. Sabitlerin tanımlanması define() fonksiyonu ile...
Cevaplar
0
Görüntüleme
146
Şuan hali hazırda bir sürü PHP veritabanı sınıfı mevcut. Bunlardan bir kaçını saymak gerekirse; ezSQL, ADOdb, MeekroDB. Hepsinin bir çok fonksiyonu ve bazı farklı özellikleri var, incelemenizi öneririm. Fakat sonuç olarak baktığımda aslında ben bunların bir çoğunu kullanmıyorum ve kod kalabalığı...
Cevaplar
0
Görüntüleme
206
858,281Konular
977,993Mesajlar
26,272Kullanıcılar
creaXRSon üye
Üst Alt