Arkadaşlar için yeni hizmetler için destek nasıl eklenir?

19

Ubuntu'da yeni arkadaşlar uygulamasıyla birlikte, zaman çizelgesi havalı olurdu. Ayrıca kendimden bir parça saptayabileceğimi de düşündüm ama herhangi bir doküman bulmakta zorlanıyorum.

Her protokolden neyin gerekli olduğunu açıklayan bir özellik var mı? Kimlik nasıl çalışıyor? Öncelikle ubuntu-online hesaplarına eklenecek desteğe mi ihtiyacınız var yoksa yeni protokolü kayıt etmek için arkadaşların bir yolu var mı?

Çok yeni ve Google adına çok zor geliyor, bu yüzden doğru yönde herhangi bir işaretçi takdir edilecektir.

    
sordu andrewsomething 10.04.2013 19:17

1 cevap

34

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!

    
verilen cevap robru 11.04.2013 19:50

Etiketlerdeki diğer soruları oku