




Php Bot Yaparken Veri Çektiğimiz Site Geç Yanıt Verirse?
-
Hocalar,
Yigit tarafından 30/Eyl/15 23:34 tarihinde düzenlenmiştir
php ile bitcoin fiyatları çekiyorum farklı sitelerden..
Btcturk, bitstamp gibi siteler tak yanıt veriyor fakat çin menşeili bi siteden fiyat çekerken bazen geç yanıt veriyor sayfa..
Veriyi çekip txt dosyasına yazdırıyorum cronjob ile.. daha sonra o txt dosyasından siteye çekiyorum böylece site açılırken geç açılmıyor
FAKAT
bu çin sitesi bazen geç yanıt veriyor dolayısıyla txt dosyasına o satır boş olarak kaydoluyor..
Bunun önüne geçmem için mantıken aklıma şu yol geldi
if deyip bu site geç yanıt verirse txt dosyasındaki bu satırı değiştirme önceki çektiğin veri kalsın.. şeklinde nasıl yaparım?
Umarım anlatabilmişimdir :)
(Çektiğim verinin boş olup olmadığını nasıl kontrol ederim?) -
eğer sayfa yanıt vermiyorsa .txt yi güncelleme hocam sende boş satırı niye yazdırıyon
-
php curl timeout
-
mantığı kendin kurmussun işte
curl ile veriyi cekiyorsun
fopen ile dosya acıosun
fwrite veya fputs ile dosyayı yazıyorsun.
fwrite ile dosya yazarken gönderdiğin ikinci paramater içerik oluyor
fwrite($dt,$icerikdegisken);
önceden hazırladığın $icerikdegisken boş ise öldür gitsin.
Tabi bunu fopenden önce yaparsan daha sağlıklı olacaktır
-
Php http timeout kullan hocam çekimde belirlediğin saniyeye kadar çekmesini bekler sonra boş döndürür eğer boşsa güncellemezsin
-
hocam zaten mantık belli de :)
kod olarak nasıl yapacağımı bilemedim tam.
php timeout kullanımını bi araştırayım. -
çektiğim verinin boş olup olmadığını nasıl kontrol ederim?
-
-
-
curl un kendi özelliği var ben bu şekilde kullanıyorum.
$info = curl_getinfo($ch);
if ($info['total_time'] >= 5 ){
curl_close($ch);
echo "5 saniyeden fazla sürdü ve iptal edildi";
}else{
//curl islemleri
}
-
cron ile veri çekildiği için timeout belki pek sağlıklı olmayabilir.
sonuçta 5 saniye timeout koysan 6.saniyede de veriyi çekebilir.
kullanıcı tarafından bir talep ile calıstırılan bir script olmadığı için (cron ile calıstıgı belirtilmiş) curl'e timeout atmak ( en azından 3-5 saniye gibi kısa bir değer atmak ) bir sonraki saniyede cekilebilecek güncel verinin önüne geçmek olur