Herkese merhaba arkadaşlar dün ingilizce olarak paylaştığım How many days ago did my followers post the last content ? yazıyı türkçe olarakta anlatmak istedim, bundan sonra ingilizce bir yazı yazarsam aynı içeriğin türkçesinide yazma kararı aldım bu karar alırken resimdeki gibi bir çok yol olmasada bir kaç sebebi var.
İçeriğim yazılım,öğretici içerik veya proje ile ilgili ise utopian-io 'dan paylaşıyorum onlar projelerim için bana destek olmuş oluyorlar fakat onların formatı gereki içeriklerin hazırlanışında belirli kurallar var samimi içerik hazırlanamıyor gayet resmi ve ingilizce yazmak zorunda kalıyoruz, aynı içeriği türkçe yazarak bunların önüne geçme isteğim.
Beni gerçekten takip eden arkadaşlar var mı bilmiyorum bi nebze olsun bunu görmek adına hem ingilizce hem türkçe paylaşırsam beni takip eden ama içeriklerimi anlamayan kişilere daha anlaşılır olmak.
Çok fazla içerik üretemediğim için iki dil ile daha çok kişiye erişebileceğim ve daha çok çevre edinebileceğim.
Çok çevre daha çok kazanç getireceği için.
Öğretici içerik hazırladığımda bunlardan türklerin'de yararlanmasını istediğim için.
Bu kadar konuşma yeterli artık içeriğimizin asıl konusuna gelelim.
The end
Steem-python'un github adresi ?
https://github.com/steemit/steem-python
Steem-python'un orjinal dökümanı.
Kütüphane hakkında daha fazla bilgi isteyenler bakabilir.
http://steem.readthedocs.io/en/latest/
Bu içerik boyunca neler öğreneceğim ?
- Python programlama dili ile steem-python kütüphanesini kullanarak ufak bir uygulama yapmayı.
- Steem-python kütüphanesinde bulunan Blog,Account ve Steem sınıflarının ufak bir bölümünu göreceğiz.
- Python fonksiyon yapısını.
Gereksinimler
- Python 3.6
- steem-python kütüphanesi / pip paket yöneticisini kullanarak indirebilirsiniz.
Zorluk ?
- Kolay
Başlayalım.
Adım adım anlatacağım.
- Bilindiği üzere python dosya formatı
.pydir bu yüzden ufak script'imizi yazacağımız bir main.py adında bir dosya oluşturuyoruz. - Daha sonra ufak programımızda kullanacağımız kütüphaneleri dahil ediyoruz ve steem node'mizi ayarlıyoruz
Bazı açıklamaları kodların içine serpiştirdim.
from steem import Steem # steem kütüphanemizdeki Steem sınıfımızı çağırdık
from steem.blog import Blog # steem kütüphanemizdeki blog modulümüzün/dosyamızın içindeki Blog sınıfını çağırdık
from steem.account import Account # steem kütüphanesindeki account dosyamızda bulunan Account sınıfmızı çağırdık.
STEEM = Steem(nodes=['https://api.steemit.com'])
Python dilinde şart olmasada bazı uyulan yazım kurallar vardır bunlara pep8 ismi verilmiştir, örneğin burada sınıf isimlerinin ilk harfinin büyük harf kullanarak yazılması pep8 kuralıdır.
STEEM = Steem(nodes=['https://api.steemit.com']) bu kısımda Steem sınıfını kullanarak nodes parametresine steemit'in node sini yazarak steem nodemizi ayarlamış olduk bütün yapacağımız işlemler https://api.steemit.com bu node üzerinden yapılacak daha bir çok node seçeneğiniz bulunmaktadır.
- İsmi follow_the_last_post olan bir fonksiyon yazacağız ve bu fonksiyonumuz username adına bir parametre alacak.
amacımız girdiğimiz username yani kullanıcı adını kullanarak kişinin takip ettiği kişileri bulmak ve onların son içeriklerine bakmak olacak.
Kodların arasına açıklamalar serpiştirdim.
def follow_the_last_post(username = "hakancelik"): # fonksiyonumuzu oluşturduk ve
# username parametresine varsayılan olarak hakancelik yazdık.
for account_name in Account(username, STEEM).get_following(): # Account sınıfımızın ilk parametresine
# fonksiyonumuza girilen username değişkenini verdik, ikinci parametreye steem node mizi ve sınıfımızda bulunan
# get_following fonksiyonuna erişmek için . (nokta) kullandık bu bize kişinin takip ettiği kullanıcıları verecektir.
# for döngüsü ile yapmış olduğumuz bu sistemde account_name adında ki değişken her döngüde username adlı
# kişinin takip ettiği kullanıcı ismi olacaktır.
last_post = Blog(account_name = account_name).take(1) # Blog sınıfımızı kullanarak ve onda bulunan take fonksiyonunu çağırıyoruz parametre olarak 1 yazdığımızda bize en son ki içerik bilgisini döndürüyor.
try: # try except hata yakalama kodlarıdır.
post_time_elapse = last_post[0].time_elapsed() # son paylaşılan içeriğin zaman bilgisini alıyoruz.
days = post_time_elapse.days # zaman bilgisinden gün bilgisini çekiyoruz.
yield dict( # ve yield ile fonksiyonumuzun çıktısını veriyoruz bu çıktı şunları içeriyor
account_name = account_name, # hesap ismi
url = last_post[0].url, # son paylaştığı içerik adresi
days = days, # ve kaç gün önce paylaştığı bilgisi
)
except IndexError: # index hatası olursa yani kişi hiç paylaşım atmamış ise
yield "{} user has never shared content".format(account_name) # buradaki kod çalışır, bu kod kişi hiç paylaşım atmamış mesajı verir.
Normalde fonksiyonlar çıktı verirken return kullanır ama biz for ile gelen verileri direk olarak sırası ile almak istediğimiz için yieldkullandık ve bu sayede follow_the_last_postfonksiyonumuz çalışır ve sonuç üretirse çıktıyı direk alabildik return kullansaydık çıktı olabilmek için fonksiyonumuzda bulunan for döngüsünün bitmesini beklememiz ve bütün sonucu bir anda ekrana vermemiz gerekirdi, çünkü return çalıştığı an döngüleri ve fonksiyonu sonlandırırken yield bunu böyle yapmaz.
yield dict( # ve yield ile fonksiyonumuzun çıktısını veriyoruz bu çıktı şunları içeriyor
account_name = account_name, # hesap ismi
url = last_post[0].url, # son paylaştığı içerik adresi
days = days, # ve kaç gün önce paylaştığı bilgisi
)
bu kısım bizim çıktı alacağımız kısım, yukarıda bahsetmiştik, bu kısımda url = last_post[0].url, şurayı silersek çıktı olarak kullanıcı adı ve kişinin son paylaşımının kaç gün önce olduğu ekrana gelir.
- Bu kodlarda çıktı almak için yield kullandığımızdan dolayı
follow_the_last_postfonksiyonumuz bir generatör olmuş oluyor fonksiyonumu çalıştırıken yine for kullanmamız gerekecek.
Çalıştıralım
for i in follow_the_last_post():
print(i)
# yada varsayılan yerine siz username girmek isterseniz
for i in follow_the_last_post("ruen"):
print(i)
# yada
for i in follow_the_last_post(username = "ruen"):
print(i)
Şeklinde yapabilirsinzi.
Sonuç
{'account_name': 'acidyo', 'days': 0}
{'account_name': 'anadolu', 'days': 5}
{'account_name': 'anneadam', 'days': 3}
{'account_name': 'anritco', 'days': 9}
{'account_name': 'arafs', 'days': 3}
{'account_name': 'artizm', 'days': 0}
{'account_name': 'artzone', 'days': 0}
{'account_name': 'bera.dincer', 'days': 1}
{'account_name': 'captainsailor', 'days': 0}
{'account_name': 'catwolff', 'days': 36}
{'account_name': 'chardonnay', 'days': 5}
{'account_name': 'cyberyunus', 'days': 0}
{'account_name': 'damla', 'days': 6}
{'account_name': 'drfrostgirl', 'days': 2}
{'account_name': 'drkent', 'days': 31}
{'account_name': 'ercu', 'days': 10}
{'account_name': 'eyupyusuf', 'days': 3}
{'account_name': 'ferow', 'days': 31}
{'account_name': 'fineartnow', 'days': 78}
{'account_name': 'firewall', 'days': 85}
{'account_name': 'fungi', 'days': 84}
{'account_name': 'gokhan83kurt', 'days': 1}
{'account_name': 'golge', 'days': 3}
{'account_name': 'hayirhah', 'days': 2}
{'account_name': 'hede-io', 'days': 15}
{'account_name': 'jimmylin', 'days': 0}
{'account_name': 'jumbot', 'days': 0}
{'account_name': 'kagantrky', 'days': 3}
{'account_name': 'kedi', 'days': 35}
{'account_name': 'mozer', 'days': 5}
{'account_name': 'murattatar', 'days': 0}
{'account_name': 'neokuduk', 'days': 30}
{'account_name': 'pars11', 'days': 1}
{'account_name': 'peri', 'days': 0}
{'account_name': 'punky', 'days': 4}
{'account_name': 'qurator', 'days': 0}
{'account_name': 'quraturk', 'days': 2}
{'account_name': 'readmore', 'days': 47}
{'account_name': 'redjepi', 'days': 0}
{'account_name': 'sauronbey', 'days': 7}
seacat user has never shared content
{'account_name': 'shaka', 'days': 0}
{'account_name': 'sorucevap', 'days': 10}
{'account_name': 'sudefteri', 'days': 2}
{'account_name': 'tarikhakan55', 'days': 0}
{'account_name': 'thornaci', 'days': 38}
{'account_name': 'trliste', 'days': 48}
{'account_name': 'tulpar', 'days': 12}
{'account_name': 'turkce-bilim', 'days': 1}
{'account_name': 'ucmuharfli', 'days': 4}
{'account_name': 'yasujizr', 'days': 5}
Bu in sonuçları, bu sayede aktif olmayan kişileri takipten çıkabilir.
Kodların tamamı
https://gist.github.com/hakancelik96/3b72a320cdd1059ed2eddba29bd939ba
Kendinize iyi bakın