Bagaimana cara menambahkan dukungan untuk layanan baru ke Teman?


19

Dengan pendaratan aplikasi-teman baru di Ubuntu, terpikir oleh saya bahwa menambahkan dukungan untuk Instagram di timeline akan keren. Saya juga berpikir mungkin akan menikamnya sendiri, tetapi saya kesulitan menemukan dokumentasi apa pun.

Apakah ada spesifikasi yang menggambarkan apa yang dibutuhkan dari setiap protokol? Bagaimana cara kerja auth? Apakah dukungan perlu ditambahkan ke akun ubuntu-online-pertama atau adakah cara bagi teman-teman untuk mendaftarkan protokol baru?

Ini sangat baru dan sangat sulit untuk nama Google, jadi setiap petunjuk di arah yang benar akan dihargai.


Ini adalah yang terbaik yang bisa saya temukan untuk saat ini: bugs.launchpad.net/ubuntu/+source/friends/+bug/1156979 dan code.launchpad.net/~robru/gwibber/friends TAPI sepertinya Anda dapat menggunakan apa pun yang digunakan untuk Gwibber (?)
Rinzwind

Yah kode untuk protokol yang didukung sepertinya tinggal di: bazaar.launchpad.net/~super-friends/friends/trunk/files/head:/… Tapi yang ingin saya lihat adalah spesifikasi yang menggambarkan kemampuan dan semacamnya. ..
andrewsomething

Ini masih hari-hari awal;)
Rinzwind

Seseorang beri saya tumblr plz.
Khurshid Alam

Jawaban:


34

Teman-teman penulis di sini.

Memang, seperti yang Anda duga, dukungan diperlukan di Akun Online Ubuntu sebelum dukungan dapat ditambahkan ke Teman. Arsitektur teman sangat bergantung pada UOA untuk melakukan semua otorisasi dan mengelola semua kunci API untuk kami. Contoh favorit saya adalah LinkedIn, karena sejauh ini satu-satunya protokol yang berkontribusi pada komunitas. Plugin UOA kebanyakan hanya dua file XML, ditambah sedikit tipuan autoconf, yang terlihat seperti ini. (gulirkan sedikit ke bawah untuk diff, yang dengan jelas menunjukkan setiap hal yang perlu ditambahkan agar LinkedIn berfungsi).

Setelah Anda melakukan hal yang sama untuk protokol Anda, Anda harus mengusulkan penggabungan terhadap lp: akun-plugins dan meminta Mardy untuk meninjau, menyetujui, dan menggabungkan mereka. Setelah itu di tempat, Anda dapat mulai menulis plugin teman, yang akan ditulis dalam Python 3.

Sekarang, salah satu peningkatan besar, utama yang diperkenalkan Teman atas Gwibber adalah penggunaan subclass. Dalam kode Gwibber asli, benar-benar tidak ada yang dilakukan dengan subclass, sehingga setiap Plugin protokol baru adalah besar copy & paste hackjob dari berbagai potongan-potongan fungsionalitas tingkat rendah. Saat menerapkan Teman, saya sangat berhati-hati untuk mengekstrak fungsionalitas umum ke dalam superclass, yang dapat dengan mudah disubklasifikasikan dan dimodifikasi. Superclass juga memiliki cukup banyak dokumen, yang harus Anda rujuk ketika memulai. Sayangnya kami belum menyiapkan sphinx untuk menerbitkannya di mana saja, jadi Anda hanya perlu membaca kode untuk saat ini.

Beberapa hal penting yang perlu diingat adalah bahwa nama kelas Anda harus cocok dengan "providername" yang digunakan, tidak sensitif huruf besar-kecil. Jadi, jika Anda menetapkan nama pengguna menjadi instagram, maka Anda harus membuat file protocols/instagram.py, dan beri nama kelas Python Anda Instagram.

Dua metode terpenting yang harus Anda terapkan agar plugin Anda benar-benar melakukan apa saja, dipanggil _whoamidan receive. Ini didokumentasikan dengan baik di base.py (ditautkan di atas), tetapi pada dasarnya _whoamimetode ini akan dipanggil secara otomatis, dan diteruskan dalam dict yang mewakili gumpalan JSON yang sudah diurai yang diberikan kepada kami oleh layanan ketika otentikasi terjadi. Jika Anda beruntung, dikt itu akan berisi nama pengguna Instagram, id pengguna, dan nama tampilan Anda, tetapi jika tidak, Anda harus melakukan panggilan API sekunder untuk mengumpulkan informasi itu. Silakan lihat Facebook._whoamicontoh protokol yang tidak memberikan informasi di muka dan memerlukan panggilan API tambahan dari dalam metode, dan lihatTwitter._whoami untuk contoh protokol yang memberi kami semua detail yang kami butuhkan di muka.

Setelah itu, receivemetode ini bertanggung jawab untuk membuat panggilan API yang melakukan polling layanan untuk pesan baru. Yang ini sedikit lebih bentuk bebas, karena setiap REST API sedikit berbeda, jadi Anda harus merujuk ke dokumen API situs web untuk mencari tahu apa yang sebenarnya perlu dilakukan di sini. Di http.py kami menyediakan Uploaderdan Downloaderkelas-kelas yang membuatnya mudah untuk melakukan panggilan REST API, dan bahkan dapat mem-parsing respons server JSON untuk Anda. Sangat penting untuk menggunakan kelas kenyamanan ini karena mereka membungkus libsoup, yang dikonfigurasikan untuk menghormati pengaturan proxy GNOME (Anda mungkin ingat betapa mengerikannya dukungan proxy Gwibber dulu, yah, kami telah memperbaiki semua itu sekarang).

Setelah Anda mendapatkan respons API dari server, Anda harus menyimpannya di DeeModel kami (tempat Gwibber menggunakan gumpalan JSON yang dibuang ke db sqlite untuk menyimpan pesan Anda, kami menggunakan DeeModel, yang pada dasarnya hanya sebuah basis data yang berbagi status di DBus, membuatnya mudah bagi banyak klien untuk menampilkan data pesan dengan mudah). Kami menyebut tindakan menyimpan pesan baru "penerbitan", dan kami menyediakan metode kenyamanan untuk itu di Base._publish. Pada dasarnya yang harus Anda lakukan adalah mengisi bagian yang kosong di sini, pastikan sebanyak mungkin informasi diisi ke dalam kolom sebanyak mungkin. Argumen yang mungkin untuk _publish didefinisikan dalam skema , dan sekali lagi Anda bisa merujuk ke plugin yang ada untuk melihat bagaimana mereka melakukannya.

Setelah sejauh ini, Anda harus memiliki cukup untuk dapat mengujinya. Kami menyediakan beberapa alat dalam toolsdirektori untuk memudahkan menjalankan kode Anda dari dalam struktur kode sumber, sehingga Anda tidak harus menginstalnya ke sistem setiap kali Anda ingin melakukan perubahan. Yang harus Anda lakukan adalah membuka satu terminal, cd ke root pohon sumber, dan jalankan ./tools/debug_slave.py. Apa yang dilakukan adalah terhubung ke DeeModel, dan hanya menampilkan semua yang terjadi padanya, sehingga Anda dapat melihat pesan yang muncul langsung ketika mereka masuk. Kemudian, di terminal kedua, cd ke root dari pohon sumber lagi, dan jalankan ./tools/debug_live.py instagram receivedan yang secara manual akan memicu metode Instagram.receive dan menampilkan sekelompok hasil debug untuk memberi tahu Anda tentang apa yang terjadi saat berjalan (Anda dapat memercikkan kode Anda dengan panggilan kelog.debug("hi") jika Anda ingin melihat lebih banyak detail tentang apa yang terjadi).

Oh, dan jika Anda masih membaca, plugin linkedin belum mendarat di bagasi, tetapi Anda masih bisa melihatnya di sini.

Jika Anda memiliki pertanyaan lain, saya selalu di #gwibber di freenode, dan saya juga merasa sangat kuat bahwa basis kode baru jauh lebih mudah dibaca dan didokumentasikan lebih baik daripada apa pun yang pernah dimiliki Gwibber, jadi silakan baca kode yang ada di sana dan tidak boleh t terlalu sulit untuk belajar dengan contoh. Facebook dan Twitter adalah yang paling lengkap.

Terima kasih atas minat Anda pada Teman!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.