Arkadaşların yazarı burada.
Gerçekten de, şüphelendiğiniz gibi, Arkadaşlar'a destek eklenebilmesi için Ubuntu Çevrimiçi Hesaplarında destek gerekiyor. Arkadaşlar mimarisi, tüm yetkilendirmeyi yapmak ve bizim için tüm API anahtarlarını yönetmek için UOA'ya çok fazla bağımlıdır. En sevdiğim örnek LinkedIn, çünkü topluluğun katkıda bulunduğu tek protokoldür. UOA eklentisi çoğunlukla sadece iki XML dosyasıdır, ayrıca biraz da autoconf hilesidir, Buna benziyor. (LinkedIn için çalışmak için 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-plugin'lere karşı birleştirme önerisinde bulunmanız ve Mardy'yi bunları gözden geçirmesi, onaylaması ve birleştirmesi gerekir. Bu, Python 3'te yazılacak olan arkadaş eklentisini yazmaya başlayabilir.
Şimdi, Arkadaşların Gwibber'i tanıttığı önemli olan majör geliştirmelerden biri, alt sınıfların kullanılmasıdır. Orijinal Gwibber kodunda, alt sınıflar ile kesinlikle hiçbir şey yapılmamıştır, bu nedenle her yeni protokol eklentisi, düşük düzey işlevsellikten oluşan çeşitli bitlerin büyük kopyala ve yapıştırılmış hackjob'tı. Arkadaşlar'ı uygularken, ortak işlevselliği kolayca alt sınıf ve modifiye edilebilen bir üst sınıfa çıkartmak için büyük özen gösterdim. Süper sınıfın da çok fazla doküman dizisi var. Başlarken başvurmanız gereken . Maalesef henüz herhangi bir yerde yayınlamak için sfenks kurmuyoruz, bu yüzden şimdilik kodu okumak zorunda kalacaksınız.
Aklınızda bulundurmanız gereken bazı önemli noktalar, sınıfınızın adının, kullanılan "kullanıcı adı" nı, büyük / küçük harf duyarsız bir şekilde eşleştirmesi gerektiğidir. Bu nedenle,
instagram olarak kullanılacak sunucu adını tanımladıysanız,
protocols/instagram.py dosyasını oluşturmalı ve Python sınıfınızı
Instagram olarak adlandırmalısınız.
Eklentinizin gerçekten bir şey yapması için kesinlikle uygulamanız gereken en önemli iki yöntem,
_whoami ve
receive olarak adlandırılır. Bunlar base.py'de (yukarıda bağlantılı) iyi bir şekilde belgelenmiştir, ancak temel olarak
_whoami yöntemi otomatik olarak çağrılacak ve kimlik doğrulaması yapıldığında hizmet tarafından bize verilen, daha önce ayrıştırılmış bir JSON blobunu temsil eden bir dict olarak iletilecektir. . Şansınız varsa, bu kullanıcı Instagram kullanıcı adınızı, kullanıcı kimliğinizi ve görünen adınızı içerecektir. Ancak, bu bilgileri toplamak için ikincil bir API çağrısı yapmanız gerekmeyecektir. Lütfen
Facebook._whoami adresine bakın. ön bilgi sağlamayan ve yöntem içinde ek bir API çağrısı gerektiren bir protokol örneği ve bkz.
Twitter._whoami Önümüzde ihtiyaç duyduğumuz tüm ayrıntıları bize veren bir protokol örneği.
Sonrasında, yeni iletiler için hizmeti yoklayan API çağrısının yapılmasından
receive yöntemi sorumludur. Bu biraz daha serbest biçimli, çünkü her REST API biraz farklı, 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'de, REST API çağrılarını kolaylaştırmayı kolaylaştıran
Uploader ve
Downloader sınıfları sağlarız ve hatta JSON sunucu yanıtlarını sizin için ayrıştırabiliriz. Bu rahatlık sınıflarını kullanmak önemlidir çünkü GNOME proxy ayarlarını onurlandırmak için yapılandırılan
libsoup 'sini kaydırıyorlar (Gwibber'in proxy desteğinin ne kadar korkunç olduğunu her zaman hatırlayabiliyorsunuz, şu anda hepsini düzelttik).
API yanıtını sunucudan aldıktan sonra, DeeModel'imizde saklamanız gerekir (Gwibber, mesajlarınızı saklamak için bir sqlite db'ye atılmış bir JSON blob kullanır, temel olarak bir DeeModel kullanıyoruz. Sadece DBus'taki durumu paylaşan ve birden fazla istemcinin mesaj verilerini kolayca görüntülemesini kolaylaştıran bir veritabanı. "Yayımlama" adlı yeni bir iletiyi saklama eylemi olarak adlandırıyoruz ve bunun için bir kolaylık sağlama yöntemi sunuyoruz:
Base._publish . Temel olarak tüm yapmanız gereken boşlukları burada doldurmaktır, mümkün olduğunca fazla bilgi olabildiğince çok sütuna doldurulduğundan emin olun. _Publish ile ilgili olası argümanlar şemada tanımlanmıştır , ve nasıl yaptıklarını görmek için varolan eklentilere başvurabilirsiniz.
Bu kadar ilerledikten sonra, test edebilmek için yeterli olmanız gerekir.Kodunuzu kaynak ağacın içinden yürütmeyi kolaylaştırmak için
tools dizininde birkaç araç sunuyoruz, böylece her değişiklik yapmak istediğinizde sisteme yüklemeniz gerekmez. Yapmanız gereken, kaynak ağacın köküne bir terminal, cd açın ve
./tools/debug_slave.py dosyasını çalıştırın. Ne yapar ki DeeModel'e bağlanır ve sadece ona gelen her şeyi gösterir, böylece mesajlar geldikçe canlı görünürler. Ardından, ikinci bir terminalde, cd ağacının köküne tekrar cd yapın ve% çalıştırın co_de% ve bunu manuel olarak tetikleyecektir.receive yöntemini çalıştırır ve bir sürü hata ayıklama çıktısı verir ve size ne olduğunu anlatan bir şeyler gösterir. (eğer daha fazla ayrıntı görmek istiyorsanız, kodunuzu
./tools/debug_live.py instagram receive 'e çevirebilirsiniz) ne olur).
Oh, ve hala okuyorsanız, linkedin eklentisi henüz gövdeye geçmedi, ancak yine de buraya bir göz atabilirsiniz.
Başka sorularınız varsa, her zaman freenode'da #gwibber çalışıyorum ve ayrıca yeni kod tabanının Gwibber'in sahip olduğu her şeyden çok daha fazla okunabilir ve daha iyi belgelendiğini hissediyorum, bu yüzden lütfen oradaki kodu okuyun ve Örneğin öğrenmesi çok zor olmamalı. Facebook ve Twitter en eksiksiz.
Arkadaşlara gösterdiğiniz ilgi için teşekkür ederiz!