RSS Follower - Kolayca Siteleri Takip Edin - Ar-Ge

Gbmdpof

Kıdemli Üye
23 Eyl 2016
2,001
11
+Üyelik Adınız: Gbmdpof

+Programın İsmi: RSS Follower

+Programın Sürümü: 1.0

+Kullanılan Programlama Dili: Python 3.6

+Programın ve Kaynak Kodunun Adresi: https://bitbucket.org/efeaydin/rss-follower

+Açıklama: İnternette güzel kaynaklarla karşılaşıyorum ve ne bunları çoğunlukla birkaç gün içinde unutuyorum veya kaybediyorum. Ayrıca bazen bazı sitelere her seferinde girip yazıları okumak, her siteye tek tek girmek zor oluyor. Hem de bazen sadece bir sitede önemli bir şey paylaşılmış mı diye bakmak için bile gereksiz resimler, reklamlar açılıyor. Bu gibi durumlarda işimi kolaylaştırmak için takip ettiğim yerleri takip etmek için RSS feedlerinden yararlanan bir program oluşturdum. Takip ettiğiniz yerlerdeki yazıları Terminal üzerinden takibi zor bir şekilde size sunmak yerine bir web sitesi aracılığı ile görünümü ve takibi hoş bir şekilde size sunar, bunu da Sanic ile yapar. CSS Frameworkü olarak Sketelon kullanır.

+Gereksinimler: (requirements.txt içinde de verilmiştir)
Kod:
sanic
feedparser
jinja2

+Kullanım ve Kurulum:
Kod:
git clone https://bitbucket.org/efeaydin/rss-follower.git && cd rss-follower/
pip3 install -r requirements.txt
python3 rss-follower.py

rss-feeds.json adında bir dosya yaratın ve içine takip etmek istediğiniz yerleri JSON formatında isim:rss_url şeklinde girin. Bunun bir örneği (takip ettiği siteleri paylaştığı için Nigella'ya teşekkürlerimi iletiyorum) rss-feeds.example.json dosyasında mevcuttur. İsterseniz o dosyanın adını rss-feeds.json şeklinde değiştirerek Nigella'nın takip ettiği yerleri kullanabilirsiniz. Arından http://127.0.0.1:8000/ adresine gidin ve istediğiniz yerin üzerine tıklayın.

+Ekran Görüntüsü:
nlrrYN.png
 

babyalien

Yeni üye
30 Haz 2018
2
0
Gereksiz kütüphaneleri saymazsak güzel olmuş fakat,
  • bu gibi basit bir proje için Sanic gibi büyük bir web server kullanmak saçma olmuş. Python'un built-in web server'ı http.server daha uygun olurdu.
  • jinja2 de yine fazla kaçmış. string.Template veya f-string de aynı işlevi daha minimal bir şekilde yerine getirebilirdi.

Uh, elinize sağlık yine de ^^
 
Son düzenleme:

r0ark

Üye
17 May 2018
67
0

Kaynak kodda gözüme çarpan birkaç madde var, öncelikle onlardan bahsetmek istiyorum:

  • İçeri aktarılan kütüphaneler bu tür basit bir uygulama için gereksiz.
    • Sanic yerine Python'ın hali hazırda bulunan http.server'ından yararlanabilirsiniz.
    • Jinja2 gibi ağır bir şablon motorunu bunun gibi küçük ve fazla bir şey gerektirmeyen projede kullanmak oldukça gereksiz. Bunun yerine PEP292'de tanıtılan template string'leri kullanabilirsiniz.
    • urllib.parse.unquote da aynı şekilde yersiz bir biçimde kullanılmış. URL'lerin genel yapılarına bakıldığında özel karakterlerden (ı, ş, *space*, vs.) kaçınıldığı görülür. Durum bu iken kullanıcının hiç değilse temel URL bilgisi olduğu varsayılmalıdır - bilgisayarla yeni tanışmış birisinin kalkıp da açık kaynak kodlu bir projeyi sıfırdan kurup kullanacağı beklenemez.
    • feedparser yine aynı şekilde gayet lüzumsuz bir kütüphane. RSS (Rich Site Summary/Zengin Site Özeti) temelde XML-vari bir formatta olduğundan xml.etree.ElementTree ile verimizin istediğimiz bölümlerini ayrıştırabiliriz.

  • Kodun okunabilirliği ve geliştirilebilirliği pek içler açıcı olmasa da fena değil.
    • Fakat 17 ve 30. satırları okurken ağlamadım değil.
    • Ayrıca PEP8'i tekrar okumanı tavsiye ederim.

Ana uygulama dışında değinmek istediğim birkaç nokta daha bulunmakta, bunlar:
  • CSS (Cascading Style Sheets) tamamen berbat.
    • normalize.css bunun gibi küçük ve sadece birkaç etiket bulunduran sayfalar için gereksiz. Sonuçta bu kadar küçük bir şey için kimse X-platform desteğini önemsemez.
    • Skeleton ise bunun gibi basit bir projede kullanılması için tasarlanan bir framework değil. Doğru düzgün grid kullandığın bile yok sayfada, herhangi bir CSS framework tamamen gereksiz.

  • HTML dosyalarında ise birden fazla şaşırdım.
    • İki şablonun da author ve description méta etiketleri boş. Unuttuğunu varsayıyorum.
    • İki şablonun da 9. satırındaki font URL'si yanlış, bu nedenle font yüklenmiyor sayfaya (gerçi doğru olsa bile normalize.css fontları da sıfırladığından bir işe yaramayacak da neyse).
    • Girdileri yazdırmak için liste etiketlerini kullanmalıydın, işleri çok daha kolaylaştırırdı.

Bunlar dışında gözüme takılan pek bir şey yok şimdilik. Yine de ellerine sağlık, kendini geliştirmen ve yorumumu dikkate alman dileğiyle.


~ n
 

r0ark

Üye
17 May 2018
67
0
Gereksiz kütüphaneleri saymazsak güzel olmuş fakat,
  • bu gibi basit bir proje için Sanic gibi büyük bir web server kullanmak saçma olmuş. Python'un built-in web server'ı http.server daha uygun olurdu.
  • jinja2 de yine fazla kaçmış. string.Template veya f-string de aynı işlevi daha minimal bir şekilde yerine getirebilirdi.

Uh, elinize sağlık yine de ^^


Aslına bakarsanız f-string kullanmak bu durumda aptalca olurdu. Nedeni ise bunun gibi küçük projelerde genelde bir template dosyasını birden fazla script kullanır, bu durumda template dosyası shared object olduğundan kendi dosyasında bulunması en iyi seçim olacaktır.

Onun dışında, Sanic çok da büyük bir web server değil. GH'da sadece 1.7K commit bulunmakta ve dosyalarının çoğu 100-400 satır arasında değişiyor. Çok daha büyük ve işlevsiz web serverlar görmüşlüğüm var.
 

Gbmdpof

Kıdemli Üye
23 Eyl 2016
2,001
11

Eleştiriniz için teşekkürler. İlk bölüm için yazayım, bir sonraki projelerimde proje büyüklüğüne bakıp kullanacağım kütüphanelere ona göre karar vereceğim. Bunda sizin de bahsettiğiniz gibi küçük bir proje olduğu için yeniden yazmayacağım.

İkinci bölüme de tamamen katılıyorum fakat front-end'den gerçekten hiç anlamam. Gözüme daha güzel gözükmesi için bir CSS frameworkü kullanayım demiştim, kodları da Skeleton doc.'undan kopyalayıp editleme, eklemeler yapmıştım. Eğer isterseniz katkıda bulunabilirsiniz, sonuçta açık kaynak kodlu. Beğenmediğiniz yerleri değiştirebilirsiniz ve isterseniz bunları benim repository'm üzerinden paylaşabilirsiniz.
 
Son düzenleme:

r0ark

Üye
17 May 2018
67
0
Eleştiriniz için teşekkürler. İlk bölüm için yazayım, bir sonraki projelerimde proje büyüklüğüne bakıp kullanacağım kütüphanelere ona göre karar vereceğim. Bunda sizin de bahsettiğiniz gibi küçük bir proje olduğu için yeniden yazmayacağım.

İkinci bölüme de tamamen katılıyorum fakat front-end'den gerçekten hiç anlamam. Gözüme daha güzel gözükmesi için bir CSS frameworkü kullanayım demiştim, kodları da Skeleton doc.'undan kopyalayıp editleme, eklemeler yapmıştım. Eğer isterseniz katkıda bulunabilirsiniz, sonuçta açık kaynak kodlu. Beğenmediğiniz yerleri değiştirebilirsiniz ve isterseniz bunları benim repository'm üzerinden paylaşabilirsiniz.


Front-end'den anlamamanız bir mazeret değil. Eğer projenizde HTML ve CSS ile çalışıyorsanız, bir zahmet kullandığınız şeylerin dokümanlarını okuyun. Evet programcılar üşengeç insanlardır ama öğrenme konusunda geçerli değil bu.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.