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


19

Ubuntu'ya yeni arkadaşlar uygulaması inişiyle , zaman çizelgesine Instagram için destek eklemenin havalı olacağı aklıma geldi . Ben de kendime bir bıçak alabilir düşündüm, ama herhangi bir belge bulmakta zorlanıyorum.

Her protokolden neyin gerekli olduğunu açıklayan bir spesifikasyon var mı? Kimlik doğrulaması nasıl çalışır? Önce desteğin ubuntu-online-hesaplara eklenmesi gerekir mi yoksa arkadaşların yeni protokolü kaydettirmeleri için bir yol var mı?

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


Şimdilik bulabildiğim en iyisi: bugs.launchpad.net/ubuntu/+source/friends/+bug/1156979 ve code.launchpad.net/~robru/gwibber/friends AMA kullanılmış ne varsa kullanabilirsiniz (?)
Rinzwind için

Desteklenen protokoller için kod şu şekilde yaşıyor gibi görünüyor: bazaar.launchpad.net/~super-friends/friends/trunk/files/head:/… Ama gerçekten görmek istediğim, yetenekleri ve benzeri tanımlayan bir özellik. ..
andrewsomething

Hala erken günler;)
Rinzwind

Birisi bana tumblr ver lütfen.
Khurshid Alam

Yanıtlar:


34

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, instagramdosyayı oluşturmanız protocols/instagram.pyve 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 _whoamive denir receive. Bunlar base.py'de (yukarıda bağlantılıdır) iyi belgelenmiştir, ancak temel olarak _whoamiyö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._whoamibilgileri ö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 receiveyö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 Uploaderve Downloaderkolay 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 libsoupGNOME 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. toolsKodunuzu 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 receiveve ç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!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.