Php Tarihte Bugün Botu
-
yeni bir proje üstünde çalışıyorum sitemde tarihte bugün olaylarını çekmek istedim ve bunun sonucu bir bot ürettim tahribat ile paylaşmak istedim :)
http://www.tarihtebugun.org/ adresinden verileri çekiyorum .
olayları çeken botumun kodlarından önce bazı arkadaşlar çektikleri verilerde tr karakter problemi yaşamasın diye yazdığım trk karakter fonksiyonumu paylaşıcam. bu kodumuzu ayrı bir php dosyasına yazıp kaydettikten sonra include ile bot sayfamızda çekmeyi unutmayalım ama isteyenler direk bot sayfasındada kullanabilir.
function trkar($tr){ $hallet=iconv("ISO-8859-9","UTF-8",$tr); return $hallet; }
burda veri tabanına verileri eklerken izmir'in gibi veriler varsa ' karakteri hata verdirmesin diye olusturduğum fonksiyon:
function botal($text) { //sql inj saldırısına karşı filitre fonksiyonu yazdım $text=stripslashes ($text); $text=strtolower($text); $text= mysql_escape_string(trim(strip_tags($text))); return $text; }
Burda ise tarihteki olayları çeken botumuz:
header("Content-Type: text/html; charset=UTF-8"); for ( $say=1 ; $say < 31 ; $say++ )//for döngüsü amaç ise tarihin günün sayısını belirleme ama unutmayın mesela ocak ayını cekiyorsak ocak ayı 31 gün dür siz $say < 31 yazan yere 32 yazıcaksınız her tarih için yapmanız gerekir.yani her tarih kaç günse onun bir üst rakamı { $site = file_get_contents('http://www.tarihtebugun.org/tarihte_bu_ay/'.$say.'-nisan.html'); //burda hangi tarihi cekip kaydedecekseniz o tarihi yazın mesela -nisan yazıyor onun yerine -ocak yazın ama tr karakter kullanmayın $aranan =('@(.*?)@si'); $aranan2 =('@(.*?)@si'); $sayi = preg_match_all($aranan, $site, $ara); $sayi2 = preg_match_all($aranan2, $site, $ara2); for($a=0; $a<$sayi; $a++){ $bilgi= ucwords(botal(trkar($ara[1][$a]))); $tarih=trkar($ara2[1][$a]); $olay="olay"; //ben burda tablomda olay kısmında olayları olay olarak ,doğumları doğum olarak kayıt tutturuyorum ki ona göre listeleteyim $tarih2="4";//burdaki olayım ise ayın numarası yani ocaksa 1 subatsa 2 yazılıcak $soruekle= mysql_query("INSERT INTO tarihte SET tarih='$tarih',aciklama = '$bilgi' , olay = '$olay', ay= '$tarih2'") or die ('hata4 '.mysql_error().''); }}
Açıklama:
- yukarıda her ayı ayrı ayrı çekmeniz lazım mesela ocak acıkyı cekerken ( $say=1 ; $say < 31 ; $say++ ) kırmızı olan yer ay kaç günse onun 1 rakam fazlasını yani 31 günse 32 , 30 günse 31 yazıyoruz.
- $site = file_get_contents('http://www.tarihtebugun.org/tarihte_bu_ay/'.$say.'-nisan.html'); buraki kırmızı kısmıda hangi ayı çekiyorsak onu düzenleyin türkçe karaktersiz ağustosu cekiyorsanız agustos yazın.
- $tarih2="4"; burdaki kırmızı alanı ise ocak ise 1 subat ise 2 yani ayın sayısı .
Sadece bu alanları düzelterek veri tabanınıza kaydı ekleyebilirsiniz. tabiki şimdi diceksiniz teker teker her ay için bu düzenlemeliri yapmak yerine aylarıda döngüyle atayılım açık sözlü olmak gerekirse pek fazla kafa yoramadım bu noktadan sonra :D peki neden tarih iki değişkenine ayın sayısını aktarıyoruz ana sayfada mesela tarihte bugun olaylarını listelerkendate fonksiyonu ile sadece date("m"); şeklinde o anki tarihin ayının cekip veri tabanında sorgulatmak için ben böyle bir yol izledim ...
Gerekli veri tabanı sütunlarımız ise
id= prkey ve a_I olucak
baslik= long text
tarih= date
ay=date
pek güzel paylaşım olmadı anlatmam cok zayıf kusura bakmayın sadece paylasmak istedim cnk ben yazılım mühendisi değilim konservatuvar ogrencisiyim bos zamanlarımda php ile ilgilenebiliyorum dün geceden beri bu bot işiyle cok ugraştım becerincede cok mutlu olup sizle paylaştım :)
-
Olsun eline saglik. Ayrica tebrik ederim.
Bende kimyagerim :)) takilma ona buna devam
Erdem tarafından 28/Eyl/14 17:35 tarihinde düzenlenmiştir -
Erdem bunu yazdı
Olsun eline saglik. Ayrica tebrik ederim.
Bende kimyagerim :)) takilma ona buna devam
cok saol hocam :)) simdi wikipediadan bisiler cekmem lazim onun apisi varmis onu ayikmaya calisiyorum :)
arkinfes tarafından 28/Eyl/14 18:58 tarihinde düzenlenmiştir -
Hacı abi sen o tuttuğun db'yi yayımla yeter :)
-
boyşe güzel paylaşımlar önemli , eline sağlık.
-
Metrodayim eve varinca undera soyleyim konuyu duzenlesin eklesin linki veririm ama saglam upload sitesi olsun link ucmasin bari
-
Emeğinize sağlık Paylaşım için Teşekkürler upload için yandex iş görür.
-
al hocam bir dizi yaratıp foreach dongusu ile yapabilirsin
<?php header("Content-Type: text/html; charset=UTF-8"); $aylar = array('ocak','subat','mart','nisan','mayis','haziran','temmuz','agustos','eylul','ekim','kasim','aralik'); foreach($aylar as $ay) { for ( $say=1 ; $say < 31 ; $say++ )//for döngüsü amaç ise tarihin günün sayısını belirleme ama unutmayın mesela ocak ayını cekiyorsak ocak ayı 31 gün dür siz $say < 31 yazan yere 32 yazıcaksınız her tarih için yapmanız gerekir.yani her tarih kaç günse onun bir üst rakamı { $site = file_get_contents('http://www.tarihtebugun.org/tarihte_bu_ay/'.$say.'-'.$ay.'.html'); // $aranan =('@<span class="olaytarihindex2">(.*?)</span>@si'); $aranan2 =('@(.*?)<span class="olaytarihindex2">@si'); $sayi = preg_match_all($aranan, $site, $ara); $sayi2 = preg_match_all($aranan2, $site, $ara2); for($a=0; $a<$sayi; $a++){ $bilgi= ucwords(botal(trkar($ara[1][$a]))); $tarih=trkar($ara2[1][$a]); $olay="olay"; //ben burda tablomda olay kısmında olayları olay olarak ,doğumları doğum olarak kayıt tutturuyorum ki ona göre listeleteyim $tarih2="4";//burdaki olayım ise ayın numarası yani ocaksa 1 subatsa 2 yazılıcak $soruekle= mysql_query("INSERT INTO tarihte SET tarih='$tarih',aciklama = '$bilgi' , olay = '$olay', ay= '$tarih2'") or die ('hata4 '.mysql_error().''); } } }
Realist tarafından 11/Ara/14 15:06 tarihinde düzenlenmiştir -
$months = array("ocak", "subat", "mart", "nisan", "mayis", "haziran", "temmuz", "agustos", "eylul", "ekim", "kasim", "aralik"); //Buraya da bu yılı çekip, ona göre eğer 4 yılda 1 ise //Şubatı 29 diye ayarlayabilirsiniz, ona üşendim :) $days = array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"); for($i=0; $12; $i++){ $link[0][$i] = $months[$i]; $link[1][$i] = $days[$i]; } for($i=0; $i<count($link[0]); $i++){ for($say=1; $say<$link[1][$i]; $say++){ $site = file_get_contents('http://www.tarihtebugun.org/tarihte_bu_ay/'.$say.'-'.$link[0][$i].'.html');
ozgunlu tarafından 11/Ara/14 16:44 tarihinde düzenlenmiştir
} } -
php kodu işime yaramaz lakin böyle bir site arıyordum şu aralar
hatta konu açacaktım tarihteki olayları loglayan bi site var mı diye
site güzel oldu eyvallah
php ve mysql yerine python + csv kullanarak bi bot da ben oluşturayım bari
-
misal verilerin içinde linkler varsa nasıl sadece yazıya çevirirsiniz