21 Şubat 2017 Salı

Python .whl modül kurma


Bu yazımda sizlere .whl halindeki dosyaları nasıl python'ın 2.x ve 3.x sürümlerine kurulumlarını göstereceğim. Bildiğiniz üzere birçok modülün python için belirli sürümlerince offical olarak yok. 


Öncelikle http://www.lfd.uci.edu/~gohlke/pythonlibs/ sitesine giriyorsunuz ve yüklemek istediğiniz python modülünü indiriyorsunuz.

Eğer python 3.5+ sürümünü kullanıyorsanız büyük ihtimal python şu dizinde olacaktır:


C:\Users\(user)\AppData\Local\Programs\Python\Python35

Değilse zaten Prom Files'ın içindedir. Script dosyasına indirdiğimiz .whl dosyasını atıyoruz ve aynı zamanda da dizini komut isteminde hazır bulunduruyoruz. Ardından komut istemine şu komutu yazıyoruz:


C:\Users(user)\AppData\Local\Programs\Python\Python35\Scripts>pip install pyHook-1.5.1-cp35-cp35m-win_amd64.whl

Siz install dan sonraki yeri kendi dosya adınız ile değiştirmelisiniz.

Hepsi bu kadar.










9 Şubat 2017 Perşembe

Python 2 ve 3 arasındaki farklar

Bu yazımda sizlere python 3.x ve 2.x sürümleri arasındaki farklılıkları ve hangi sürümü seçmeniz gerektiğinden bahsedeceğim.


Print


İki sürüm arasında en çok bilinen değişikliktir.

Bu fonksiyonun Python 2'de kullanımı şu şekildedir:

print "Merhaba Dünya!"

Bu kullanımın aksine Python'2 de bu bu kodu yazmanın hiçbir sakıncası yoktur:

print ("Merhaba Dünya!")
Ancak python 3 de parantez olmadan bu işlem gerçekleştirilemez. Bu kullanım desteklenmeyeceğinden dolayı, Syntax Error alırsınız.

File "<stdin>", line 1
    print "Merhaba Dünya"
                        ^
SyntaxError: Missing parentheses in call to 'print'

Tamsayı bölme farklılıkları

Şahsen en çok beğendiğim değişikliklerdendir.

Python 2'de bir tamsayayı bir tamsayıya böldüğünüzde normalde size float tipi bir sonuç vermesi gerekirken
python sonucu en yakın tamsayıya tamamlayıp o sonucu gösterir. Eğer float tipi bir sonuç almak istiyorsanız
böleceğiniz sayıyı da ondalıklı olarak yazmanız gerekiyor.

Python 3'de ise bu durum değiştirildi. Eğer sayıyı "/" opretörü ile kullanırsanız size float  (olması gereken) sonucu gösteriyor. Pythonın sayıyı yuvarlamasını istiyorsanız "//" operatörünü tercih etmeniz gerekiyor.
Aynı zamanda float tipi bir sayı ile işlem yaparsanız "/" operatörü doğru çıktıyı verecek, "//" operatörü ise sonucu yine yuvarlayacak fakat yuvarlanmış sonucu float tipinde gösterecektir.

Unicode farklılıkları

Python 2'de byte tipi yoktur. Ancak Python 3'de Unicode (utf-8) dizeleri ve 2 bayt sınıfları eklenmiştir, byte ve bytearrays.

xrange() fonksiyonu

Python 3'de bu fonksiyon range() fonksiyouna dönüştürülmüş ve kaldırılmıştır.

next() fonksiyonu ve next() metodu

Python 2'de her iki şekilde de kullanılabilmesine karşın; Python 3'de sadece metod olarak kullanılabilir.

Döngüsel değişkenler ve genel ad alan sızıntısı

Python 2'de bir değişken tanımlayıp onu bir for döngüsü içinde kullanırsanız; değişken for döngüsünün
özel alanına girmez, döngüde yaptığınız işlem değişkeni etkiler. Yani Python 2 değişkenin döngü içinde veya dışında olup olmadığını umursamaz, tek bir değişken olarak kabul eder.

Python 3'de ise döngünün içinde ayrı, dışında ayrı değişkenler kabul edilir.

input() ve raw_input() fonksiyonu


Python 2'de raw_input() string, input() integer tipi sonuç verirken Python 3'de artık raw_input() yok ve input() fonksiyonunun çıktısı her zaman string.

Yuvarlama işlemleri


Python 2'de round() fonksiyonu normalde ondalıklı sayıları eğer ondalık değer 5 ve 5'ten büyükse üst sayıya yuvarlıyordu. Python 3'de artık önceki veya sonraki çift sayıya yuvarlanıyor.












8 Şubat 2017 Çarşamba

PHP ile bot yapımı ve başka siteden veri çekme

Bu yazımda PHP ile istediğimiz sitenin istediğimiz kısmını çekerek sayfamızda nasıl kullanabileceğimizi anlatacağım.

Öncelikle bu işlem için kullanmamız gerek fonksiyonları açıklayıp ardından da konunun pekişmesi için güzel bir örnek olduğunu düşündüğüm IMDB sitesinden film adını ve film puanını çeken bir uygulamayı yazacağım.


PHP ile bir sayfadan veri çekmek için file_get_contents hazır fonksiyonunu kullanıyoruz. Aşağıdaki kodu çalıştırırsak sayfayı olduğu gibi çekebiliriz.





<?php
$url = "http://www.imdb.com/title/tt1675434";
$cekilen_veri = file_get_contents($url);
echo $cekilen_veri;
?>


Ancak biz sayfadaki belli bir alanı almak istiyoruz. Bu durumda ne yapmalıyız?
Böyle bir istediğimiz olduğunda öncelikle bir fonksiyon yazmamız gerekiyor.

function getir($baslangic, $son, $cekilmek_istenen)
{
    @preg_match_all('/' . preg_quote($baslangic, '/') .
    '(.*?)'. preg_quote($son, '/').'/i', $cekilmek_istenen, $m);
    return @$m[1];
}

Ardından veri çekmek istediğim URL adresini belirliyorum. Ben http://www.imdb.com/title/tt1675434/ adresindeki Can Dostum (Intouchables) filminin bilgilerini çekmek istiyorum.

$url = "http://www.imdb.com/title/tt1675434";


Daha sonra öncelikle sayfanın tamamını çekmem gerektiği için yukarıda da anlattığım file_get_contents metodunu kullanıyorum.



$icerik = file_get_contents($url);

Şimdi en önemli kısma geldik. Film adını ve film puanını çekmek istiyoruz. Peki bunların nerede olduğunu nasıl bulacağız. Belirttiğim URL'ye giderek sağ tıklıyorum ve sayfa kaynağını görüntüle diyorum.

Sayfa kaynağı karşıma geliyor ve burada film adını bulmak için CTRL + F yaparak Can Dostum yazıyorum.

Nihayet istediğim alanı buluyorum. CTRL + F yapıp Can Dostum diye arattığımda yukarıdaki satırlarda da sonuçlar buluyor ancak onlar Can Dostum (2011) şeklinde olduğu için ben sadece film adının yazılı olduğu bu kısmı seçtim.

Görüldüğü gibi Can Dostum yazan yer yani filmin adının olduğu yer <span class="itemprop" itemprop="name"> ve </span> kodlarının arasında. Bu durumda başlangıcım <span class="itemprop" itemprop="name"> ve sonum da </span> olacak.



$film_adi = getir('<span class="itemprop" itemprop="name">','</span>',$icerik);


Şimdi aynı işlemi IMDB film puanı için yapacağım. Sayfa kaynağında 8,6 aratıyorum.
Yukarıdaki gibi 8,6 yazan yerleri buluyorum. 701.satır tam olarak istediğim şey ve hemen onun için de aşağıdaki kodu yazıyorum.




$imdb_puani = getir('class="titlePageSprite star-box-giga-star">','</div>',$icerik);

İstediğimiz bilgileri çektik şimdi sadece bunları göstermek kaldı. Burada dikkat etmemiz gereken nokta array olarak çektiğimiz için değişkeni buna uygun yazmak.

$film_adi değil de $film_adi[0] şeklinde göstermemiz gerekiyor.



echo "<b>Film Adı :</b> " . $film_adi[0] . "<br />";
echo "<b>IMDB Puanı :</b> " . $imdb_puani[0];


Artık herşey tamam. Sayfamı çalıştırdığımda istediğim verilerin çekildiğini görüyorum.



NOT : Sayfaya girdiğimde film adında Can Dostum yazıyor ancak program Intouchables olarak çekiyor diyebilirsiniz. Bunun nedeni IMDB sitesinin tarayıcıdan girildiğinde filmlerin Türkçe adını göstermesi. Ancak program ile çektiğimizde İngilizce olarak geliyor. Zaten yazının başında yapmış olduğum sayfanın tamamını çekme örneğini incelerseniz orada da İngilizce olarak çektiğini görürsünüz.

Şimdi $url değişkenini değiştirerek başka bir film adresi giriyorum.










Python - Django Nedir, nerelerde kullanılır, ne işe yarar?

Google’a django yazdığımızda karşımıza güzel bir film geldiği doğrudur.Fakat bizim bahsedeceğimiz Django o değil ama en az onun kadar güzel bir şey.Django Python dili ile uğraşmış olan çoğu kişinin duyduğu bir şeydir.Peki nedir bu Django? Django; Python diline ait bir frameworktür.2005 yılında sunulmasına rağmen fazlaca rağbet görmüş ve ülkemizde de geliştiricileri artmaktadır. Django Python’un 2.x sürümünde çalışmaktadır.3.x sürümü webframeworkleri destekleme konusunda eksiktir.