Arkadaşlar burada yazar.
Gerçekten de, şüphelendiğiniz gibi, Arkadaşlar'a destek eklenmeden önce Ubuntu Çevrimiçi Hesaplarında destek gerekmektedir. Arkadaş mimarisi, tüm yetkilendirmeyi yapmak ve bizim için tüm API anahtarlarını yönetmek için büyük ölçüde UOA'ya bağlıdır. En sevdiğim örnek LinkedIn'dir, çünkü şu ana kadar topluluğun katkıda bulunduğu tek protokoldür. UOA eklentisi çoğunlukla sadece iki XML dosyası ve bunun gibi görünen autoconf hilesi. (LinkedIn'in çalışması için eklenmesi gereken her şeyi açıkça gösteren fark için biraz aşağı kaydırın).
Protokolünüz için aynısını yaptıktan sonra, lp: account-plugins'e birleştirme önermeniz ve Mardy'nin bunları gözden geçirmesini, onaylamasını ve birleştirmesini sağlamanız gerekir. Bu gerçekleştiğinde, Python 3'te yazılacak olan arkadaş eklentisini yazmaya başlayabilirsiniz.
Şimdi, Friends'in Gwibber üzerinden ortaya koyduğu önemli ve büyük iyileştirmelerden biri, alt sınıfların kullanılmasıdır. Orijinal Gwibber kodunda, alt sınıflarla kesinlikle hiçbir şey yapılmadı, bu nedenle her yeni protokol eklentisi, düşük seviyeli işlevselliğin çeşitli bitlerinin büyük bir kopyala ve yapıştır hackjobuydu. Friends'i uygularken, ortak işlevselliği kolayca alt sınıfa dönüştürülebilen ve değiştirilebilen bir süper sınıfa çıkarmak için büyük özen gösterdim. Üst sınıf ayrıca başlarken başvurmanız gereken oldukça fazla öğretiye sahiptir. Ne yazık ki, henüz hiçbir yerde yayınlamak için sfenks kurmadık, bu yüzden şimdilik kodu okumak zorunda kalacaksınız.
Akılda tutulması gereken bazı önemli hususlar, sınıfınızın adının, duruma göre duyarsız bir şekilde kullanılan "sağlayıcı adı" ile eşleşmesi gerektiğidir. Dolayısıyla, sağlayıcı adını tanımladıysanız, instagram
dosyayı oluşturmanız protocols/instagram.py
ve Python sınıfınızı adlandırmanız gerekir Instagram
.
Eklentinizin gerçekten bir şey yapması için kesinlikle uygulamanız gereken en önemli iki yönteme _whoami
ve denir receive
. Bunlar base.py'de (yukarıda bağlantılıdır) iyi belgelenmiştir, ancak temel olarak _whoami
yöntem otomatik olarak çağrılır ve kimlik doğrulama gerçekleştiğinde hizmet tarafından bize verilen önceden ayrıştırılmış bir JSON blobunu temsil eden bir dikte geçirilir. Şanslıysanız, bu sözlük Instagram kullanıcı adınızı, kullanıcı kimliğinizi ve görünen adınızı içerecektir, ancak değilse, bu bilgileri toplamak için ikincil bir API çağrısı yapmanız gerekecektir. Lütfen Facebook._whoami
bilgileri önceden sağlamayan ve yöntemin içinden ek bir API çağrısı gerektiren bir protokol örneğine bakın ve bkz.Twitter._whoami
ihtiyaç duyduğumuz tüm detayları bize veren bir protokol örneği.
Daha sonra receive
yöntem, hizmeti yeni iletiler için sorgulayan API çağrısı yapmaktan sorumludur. Bu, biraz daha serbest biçimli, çünkü her REST API biraz farklıdır, bu yüzden burada tam olarak ne yapılması gerektiğini anlamak için web sitesinin API belgelerine başvurmalısınız. Http.py biz sağlamak Uploader
ve Downloader
kolay DİNLENME API çağrıları yapmak için yapmak sınıfları ve sizin için can bile ayrıştırma JSON sunucu yanıtları. Bu kolaylık sınıflarını kullanmak önemlidir, çünkü bunlar libsoup
GNOME proxy ayarlarını onurlandırmak için yapılandırılmıştır (Gwibber'in proxy desteğinin her zaman ne kadar korkunç olduğunu hatırlayabilirsiniz, şimdi hepsini düzelttik).
Sunucudan API yanıtını aldıktan sonra, bunu DeeModel'de saklamanız gerekir (Gwibber'in mesajlarınızı saklamak için bir sqlite db'ye dökülmüş bir JSON blob kullandığı, temelde sadece bir veritabanı olan bir DeeModel kullanıyoruz durumu DBus genelinde paylaşarak birden çok istemcinin ileti verilerini kolayca görüntülemesini kolaylaştırır). Yeni bir mesaj saklama eylemini "yayınlama" olarak adlandırıyoruz ve adresinde kolaylık sağlayan bir yöntem sunuyoruz Base._publish
. Temel olarak tek yapmanız gereken buradaki boşlukları doldurmaktır, mümkün olduğunca fazla bilginin mümkün olduğunca çok sütuna doldurulduğundan emin olun. _Publish için olası argümanlar şemada tanımlanmıştır ve yine nasıl yaptıklarını görmek için mevcut eklentilere başvurabilirsiniz.
Bu kadar ilerledikten sonra, test edebilmek için yeterli değere sahip olmalısınız. tools
Kodunuzu kaynak ağacın içinden çalıştırmayı kolaylaştırmak için dizinde birkaç araç sağlarız , böylece her değişiklik yapmak istediğinizde sisteme yüklemeniz gerekmez. Yapmanız gereken bir terminal açmak, kaynak ağacın köküne cd yapmak ve çalıştırmak ./tools/debug_slave.py
. Yaptığı şey DeeModel'e bağlanır ve sadece başına gelen her şeyi görüntüler, böylece gelen iletileri canlı olarak göründükleri gibi görebilirsiniz. Sonra, ikinci bir terminalde, kaynak ağacın köküne cd atın ve çalıştırın ./tools/debug_live.py instagram receive
ve çalıştırın. Instagram.receive yöntemini manuel olarak tetikleyecek ve çalıştıkça neler olduğunu anlatmak için bir grup hata ayıklama çıktısı görüntüleyecektir (kodunuzu çağrılarla serpebilirsiniz)log.debug("hi")
ne olduğu hakkında daha fazla ayrıntı görmek istiyorsanız).
Oh, ve hala okuyorsanız, Linkedin eklentisi henüz gövdeye inmedi, ancak yine de buraya bakabilirsiniz.
Başka sorularınız varsa, her zaman freenode üzerinde #gwibber'deyim ve ayrıca yeni kod tabanının Gwibber'in sahip olduğu her şeyden çok daha okunabilir ve daha iyi belgelendiğini hissediyorum, bu yüzden lütfen orada bulunan kodu okuyun ve olmamalıdır. Örnekle öğrenmek çok zor değil. Facebook ve Twitter en eksiksiz.
Arkadaşlara gösterdiğiniz ilgi için teşekkür ederiz!