web hasadı ,kazıma, test vb yöntemler için en kullanışlı araçlardan bir tanesi selenium kütüphanesi. diğer bir deyişle web üzerinde herhangi bir işi otomatize etmek istiyor, bir siteden veri çekmek istiyorsanız selenium ihtiyacınızı karşılamakta yardımcı olacaktır.
bu kısa yazıyı selenium kullanarak wordpress kullanan bir siteye giriş yapmanın nasıl yapılabileceğine gösteren en temel python kodunu ile sonlandıralım.
from selenium import webdriver
import time
browser = webdriver.Firefox()
url = "https://www.wordpresssitsi.com/wp-admin/"
browser.get(url)
username = browser.find_element_by_id("user_login")
password = browser.find_element_by_id("user_pass")
username.send_keys("k_adi") # wordpress kullanici adi
password.send_keys("k_adi_sifre") # wordpress kullanici adi
submitButton = browser.find_element_by_id("wp-submit")
submitButton.click()
time.sleep(10)
browser.close()
pythonda excel dosyaları ile çalışmak için kullanabileceğiniz kütüphane sayısı oldukça fazla. bu kütüphanlerin kendine göre avantajları mevcut. bu kısa yazıda kullanımı oldukça kolay olan pandaw dan bahsedegim
öncelikle pandası kuralım
pip3 install pandas
kurulum sorunsuz olarak tamamlandıktan sonra ilk örneğimizi yapabiliriz. temel ıolarak üç adım mevcut.
csv dosyası üzerinde çalışmak istereniz read_excel yerine read_csv kullanmanız gerekmektedir. ; ile ayrılmış ve utf8 ile kodlanmış bir csv dosyasında çalışmak isterseniz
data = pd.read_csv (r'router.csv', sep=';', encoding='utf8', quotechar='"')
işinize yarayacaktır. eğer herhangi bir sutun veya satır ile çalışmak istiyorsak
df = pd.DataFrame(data, columns= ['router'])
ile çalışacağınız sütünu seçebilirsiniz. satırları okuyorak satırlardaki veriler ile işlem yapmak için ise
for i in df.index:
print(df['router'][i]+'----'+df['interface'][i])
yapısını kullanabilirsiniz. pandas konusunda daha detaylı bilgilere erişmek isterseniz aşagıdaki bağlantılar işinize yarayacaktır
yaptığınız uygulamaları sosyal platformlar ile buluşturmak istiyorsanız telegram bunun için iyi bir başlangıç olabilir.
öncelikle mevcut bir telegram hesabınız olması gerekiyor. hesabınızla
BotFather
botunu bulun ve sırayla
/start
/newbot
/kullanicak_bot_adi_bot ( sonunda bot olmak zorunda)
yazıyoruz. adımları doğru şekilde gerçekleştirdiysek; yeni bir bot oluşturarak bize bir token / HTTP API üretecek.
uygulamamızı raspberry pi üzerinde gerçekleştireceğimiz için bize öncelikle sağlam bir kütüphane gerekiyor. ben bu uygulamamızda python – teleport kütüphanesi kullanacağım
pip install telepot
ile kütüphanemizi raspberry pi üzerine kuralım. ( python , pip vb gereksinimlerin daha önceden kurulu olduğu varsayılmaktadır)
kullanıcıdan gelecek komutları dinleyen ve buna cevap dönecek basit bir bot yapalım. aşağıdaki örnekte raspberry pi nin gerçek ipsini, zamanı gibi basit bir kaç fonksiyonun nasıl gerçekleştirileceği görülmektedir.
uygulamayı geliştirerek raspberry pi ile istediğiniz tüm işlemleri telegram üzerinden yönetebilirsiniz.
genel olarak network ekipmanlarında cli ile konfigürasyon yapıyorsanız sıklıkla kopyala – yapıştır yapıyorsunuzdur. ancak bu yöntem hatalara oldukça açıktır.
bu hatayı minimize etmek adına python ile yazılmış nokia sros güzel bir kod bulmuştum. bunu paylaşmak istedim. örnek için aşağıdaki şekilde bir konfigürasyonumuz olsun.. bunu c1.txt olarak kaydediyoruz.
vpls 11 customer 1 vpn 11 i-vpls create
backbone-vpls 100:11
exit
stp
shutdown
exit
sap 1/5/1:11 create
exit
sap 1/5/1:12 create
exit
no shutdown
exit
vpls 100 customer 1 vpn 100 b-vpls create
service-mtu 2000
stp
shutdown
exit
mrp
flood-time 10
no shutdown
exit
sap 1/5/1:100 create
exit
spoke-sdp 3101:100 create
exit
spoke-sdp 3201:100 create
exit
no shutdown
exit
t.py olarak kaydettiğimiz python kodunu çalıştığımızda mevcut kodumuz aşağıdaki örnekte görüleceği üzere yeniden düzenleniyor. bu şekilde bir yapı bir çok olası hatanın önüne geçecektir.
şimdi bu platform üzerine basit bir örnek yapalım. raspberry pi üzerinde phyton ile bir kaç temel parametreyi okuyarak thingspeak kanalı üzerine gönderelim.
thingspeak üzerinde bir kanalda veri tutulabiliyor. biz bu örneğimizde anlık cpu kullanımı, ram kullanımını ve cpu sıcaklık değerini gönderelim.
siz gpio arayüzünden aldığınız verileri kod üzerinde ufak bir değişiklik ile gönderebilirsiniz.
import httplib, urllib
import psutil
import time
import os
def cpu_sicaklik_oku():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
if __name__ == "__main__":
while True:
cpu = psutil.cpu_percent()
ram = (psutil.avail_phymem()/1024)/1024
cpu_sicaklik = cpu_sicaklik_oku()
params = urllib.urlencode({'field1': cpu, 'field2':ram, 'field3':cpu_sicaklik, 'key':'THINKSPEAK_KEY'})
headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
conn = httplib.HTTPConnection("api.thingspeak.com:80")
conn.request("POST", "/update", params, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
conn.close()
time.sleep(60)
linuxte iç ve dış ip adresi değişimlerinin twitter hesabına gönderilmesi yazısında linux üzerinden nasıl twit atılabileceğin dair bir şeyler yazmıştık. aynı işlemi raspberry üzerinden yapmak isteyebiliriz. ancak o yazıda anlatılan kütüphane ruby aitti. bize python ve c fazlasıyla yetecektir. raspberry üzerine birde ruby bulaştırmaya gerek yok.
python için işimize yarayacak bir çok kütüphane var ancak tweepy tercihimiz olacak. raspianımızı python-tweepy ve bağımlı olan kütüphanleri yükleyelim.
pi@cicek /etc/apt/sources.list.d $ sudo apt-get install python-tweepy
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
python-oauth
Suggested packages:
python-tweepy-doc
The following NEW packages will be installed:
python-oauth python-tweepy
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 39,0 kB of archives.
After this operation, 331 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main python-oauth all 1.0.1-3 [14,2 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main python-tweepy all 1.7.1-2+deb7u1 [24,8 kB]
Fetched 39,0 kB in 1s (32,8 kB/s)
Selecting previously unselected package python-oauth.
(Reading database ... 53951 files and directories currently installed.)
Unpacking python-oauth (from .../python-oauth_1.0.1-3_all.deb) ...
Selecting previously unselected package python-tweepy.
Unpacking python-tweepy (from .../python-tweepy_1.7.1-2+deb7u1_all.deb) ...
Setting up python-oauth (1.0.1-3) ...
Setting up python-tweepy (1.7.1-2+deb7u1) ...
kütüphanemiz şimdi raspberry üzerinde hazır ve kullanabiliriz. http://www.tweepy.org/ adresinden kütüphane hakkında detaylı bilgi alabilirsiniz.
eğer python-tweepy reponuzda yoksa pip ile kurabilirsiniz tabiki.
kurulum tamam tweepy adresinden kütüphanenin kullanıma kısaca baktıysanız basit bir örnek yapalım.. klasik olarak cpu nun sıcaklık değerini tweet olarak atalım.
twitter üzerinden https://apps.twitter.com/ gerekli ayarları önceden yapmış olmanız gerekmektedir. çünkü buradaki Consumer ve Access bilgiler gerekecek.
#!/usr/bin/env python
#gerekli kütüphaneleri import edelim
import os
import sys
import tweepy
#apps.twitter.com adresinden aldığımız consumer ve access bilgileri tanımlayalım
CONSUMER_KEY = 'size ait Consumer Key (API Key)'
CONSUMER_SECRET = 'size ait Consumer Secret (API Secret)'
ACCESS_KEY = 'size ait Access Token'
ACCESS_SECRET = 'size ait Access Token Secret'
#twitter ile doğrulama işlemleri gerçekleştirelim
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
#meşhur sıcaklık verisini alıp işleyelim
cmd = '/opt/vc/bin/vcgencmd measure_temp'
line = os.popen(cmd).readline().strip()
temp = line.split('=')[1].split("'")[0]
#sıcaklık bilgisini tweet olarak gönderelim.
api.update_status(temp);
kodumuzu çalıştırdığımız da
ekran görüntüsündeki gibi başarılı şekilde twitimiz public olarak atılmış oldu.
mqtt için her geçen yeni bir client, kütüphane yayınlanmaya devam ediyor. bunlardan en kullanışlarından bir tanesi kesinlikle paho .
sitesinde an itibariye mqtt için C/C++, Java, Javascript, Python, Go ve C# .NET destekleri olduğu görülmekte.
paho nun python kütüphaneleri kullanarak basit bir örnek yapalım. öncelikle gerekli kütüphaleri raspberry üzerine yükleyelim.
pi@cicek ~ $ sudo pip install paho-mqtt
eğer sisteminiz üzerinde pip kurulu değilse tabiki öncelikle pip kurulumunu yapmanız gerekmektedir.
pi@cicek ~ $ sudo apt-get install python-pip
gerekli kurulumları yaptıktan sonra kodumuzu yazarak gerekli testleri yapabiliriz. bu örnekte lokal bir broker kullanmak yerine cloudmqtt.com üzerinde yer alan servisi kullanalım. böylelikle uygulamalarımızı diğer sistemlere entegrasyonu konusunda ufak bir atmış oluruz. cloudmqtt üzerinde bir hesap oluşturak yeni bir servis oluşturalım.
yukarıdaki gibi bize kullanıcı adı şifre v.b. verecektir. sitesinde yer alan şablona uygun olarak test kodumuzu yazalım.
daha önceki örneklerimizde raspberry nin sistem özelliklerini okumayı ve bu verileri rrd veri tabanına kaydetmeyi ve izlemesi konusunda örnekler yapmıştık.
bu yöntemin uygun olmayacağı veya istenmeyeceği durumlar olabilir. böyle bir durum olduğunu düşünerek okuduğumuz cpu sıcaklık değerini bir veri tabanına (örneğimizde mysql olacak) kaydedelim ve dinamik bir arayüz ile veri tabanına kaydettiğimiz verileri kullanıcılarımız sunacağımız bir uygulama geliştirelim.
öncelikle veri tabanımızda hangi verilerin olacağını belirlemeli ve veritabanımızı oluşturmalıyız. raspberry pinin klasik dağıtımları üzerinde mysql, php, apache gibi sunucu yazılımları mevcut değil. bunları kurmanız gerektiğini unutmayınız. internette konu hakkında dokümanlar mevcut. uygun bir zamanda detaylı olarak onuda ekleyebiliriz. bunların olduğunu var sayarak esas konumuza dönelim.
bu örneğimizde tarih ve saat verisinin yanında sadece sıcaklık değerini tutmamız yeterli olacaktır.
sudo mysql -u root -p
CREATE DATABASE raspberry_sistem;
USE raspberry_sistem;
CREATE TABLE cpu_temp ( id INT NOT NULL AUTO_INCREMENT,
tarih DATE NOT NULL,
saat TIME NOT NULL,
sicaklik varchar(50),
PRIMARY KEY ( id ));
GRANT INSERT,SELECT ON raspberry_sistem.* TO 'raspberry'@'localhost' IDENTIFIED BY 'pi';
FLUSH PRIVILEGES;
artık veritabanımız hazır. sıra sıcaklık değeri okuyarak veri tabanına eklemeye geldi. ben örneğimi python kullanarak yapacağım. benim kullandığım python kütüphaneleri sizin raspberry üzerinde olmayabilir. kodun çalışması için eksik kütüphaneleri yüklemeniz gerekmektedir.
#sicaklik_cpu.py dosyasi
import time
import os
import fnmatch
import MySQLdb as mdb
import logging
import time
import datetime
#cpu sicaklik degerinin okunmasi
def cpu_sicaklik_oku():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
#mysql veritabanina veri eklenmesi
def insertDB(cpu_sicaklik):
sql = "INSERT INTO cpu_temp (tarih, saat, sicaklik) VALUES ('%s', '%s', '%s' )" % (time.strftime("%Y-%m-%d"), time.strftime("%H:%M"), cpu_sicaklik)
try:
con = mdb.connect('localhost', 'raspberry', 'pi', 'raspberry_sistem');
cursor = con.cursor()
cursor.execute(sql)
con.commit()
con.close()
except mdb.Error, e:
logger.error(e)
#sicaklik okuma ve veritabanina yazma fonksiyonlarini calistiralim
cpu_sicaklik = float(cpu_sicaklik_oku())
print cpu_sicaklik
insertDB(cpu_sicaklik)
kodun oldukça sadece ve anlaşılır olduğunuz düşüyorum. temel olarak sıcaklık verisinin okunmasını ve bu verinin veri tabanına eklenmesini sağlayarak iki ayrı fonksiyon oluşturduk. ve bu fonksiyonları sırası ile çağırıyoruz.
sıcaklık değeri okundu ve ekrana yazıldı ve herhangi bir hata vermedi. kontrol için eklediğimiz kodu “print cpu_sicaklik” her şey tamam olduktan sonra kaldıracağız. veri tabanına gerekli veri girişi doğru şekilde yapıldığının kontrolünü de yapalım.
mysql> select * from cpu_temp;
Empty set (0.01 sec)
mysql> select * from cpu_temp;
+----+------------+----------+----------+
| id | tarih | saat | sicaklik |
+----+------------+----------+----------+
| 1 | 2015-07-19 | 22:35:00 | 54.1 |
+----+------------+----------+----------+
1 row in set (0.00 sec)
kodumuz sağlıklı olarak çalışıyor. şimdi bu işlemi otomatikleştirmek için crontab içine yerleştirelim.
5 dakika bir çalışacak şekilde gerekli ilavemizi de yaptıktan sonra sıra kullanıcı arayüzüne geldi. grafik çizimi için google chart servisini line chart kullanacağım. detaylı bilgiyi https://developers.google.com/chart/interactive/docs/gallery/linechart adresinden alınabilir.
bu servis sayesinde grafik kütüphaneleri ile fazla uğraşmayacağım ve işimi kolayca halledeceğim.
<!DOCTYPE html>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
google.load('visualization', '1', {'packages':['corechart']});
google.setOnLoadCallback(drawChart);
function drawChart() {
var json = $.ajax({
url: 'get_json.php',
dataType: 'json',
async: false
}).responseText;
var data = new google.visualization.DataTable(json);
var options = {
title: 'Raspberry CPU Sicaklik',
width: 600,
height: 400
};
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
setInterval(drawChart, 500 );
}
</script>
<div id="chart_div" style="width: 600px; height: 400px;"></div>
yukarıdaki kodu index.html olarak kaydelim ve esas işi yapacak get_json.php php dosyamızı da oluşturalım
Google in yeni hizmetlerinden birisi olan appengine özellikle python geliştiricilerini sevindiren bir servis. Şu an için bir çok geliştiriciye tam olarak hitap etmesede işe yarar bir servis.
http://code.google.com/appengine/
adresine girerek kaydımızı yaptırıyoruz. Daha sonra
http://code.google.com/appengine/downloads.html
adresinden güncel olan SDK yi indiriyoruz ve sistemimize kuruyoruz. Kurulumun yapılabilmesi için sisteminizde Python olması gerekmekte. Eğer sistemimizde python yok ise python.org adresinde sistemimize uygun olan paketi indirip kurmamız gerekecek.
Şimdi http://appengine.google.com/ adresine girerek bir adet proje oluşturalım. Proje ayalarını yaptıktan sonra bir editor açalım ve alışıldığı üzere “Hello world” uygulamasını gerçekleştirelim.
Sıra mevcut dosyalarımı google sunucularına yüklemeye geldi. Burada dikkat etmemiz gereken nokta app.yaml dosyası içindeki ” application: test_project” satırı. Buradaki test_project yerine http://appengine.google.com/ adresinde oluşturduğumuz proje adını yazmamız gerekiyor.
#cd ..
#appcfg.py update test_project
Bundan sonra bizden app engine kayıt olurken girdigimiz google hesabımıza ait eposta adresini ve şifresini isteyecektir. bunları girdikten sonra dosyalarımız google sunucularına yüklenmeye başlayacaktır.
Sıra geldi projemizi test etmeye. Oluşturdugumuz proje adına göre google bize http://test_project.appspot.com şeklinde bir adres vermişti. Bu adrese girerek uygulamanızı test edebilirsiniz. Veya domanininiz için gerekli dns tanımlarını yaptı iseniz kendi domain adresinizide kullanabilirsiniz. Örnek http://uygulama.ferhatcicek.com – http://cicek.appspot.com .