Làm cách nào để thêm hỗ trợ cho các dịch vụ mới cho Bạn bè?


19

Với việc hạ cánh ứng dụng bạn bè mới trong Ubuntu, tôi nhận thấy rằng việc thêm hỗ trợ cho Instagram trong dòng thời gian sẽ rất tuyệt. Tôi cũng nghĩ rằng tôi có thể tự đâm vào nó, nhưng tôi đang gặp khó khăn trong việc tìm kiếm bất kỳ tài liệu nào.

Có một thông số mô tả những gì cần thiết từ mỗi giao thức? Auth hoạt động như thế nào? Trước tiên, có cần hỗ trợ thêm vào tài khoản trực tuyến trên Ubuntu hay có cách nào để bạn bè đăng ký giao thức mới không?

Nó rất mới và có một tên Google rất khó, vì vậy bất kỳ con trỏ nào đi đúng hướng sẽ được đánh giá cao.


Đây là tốt nhất tôi có thể tìm cho bây giờ: bugs.launchpad.net/ubuntu/+source/friends/+bug/1156979code.launchpad.net/~robru/gwibber/friends NHƯNG có vẻ như bạn có thể sử dụng bất cứ điều gì đã được sử dụng cho Gwibber (?)
Rinzwind

Chà, mã cho các giao thức được hỗ trợ dường như tồn tại: bazaar.launchpad.net/~super-friends/friends/trunk/files/head:/. Nhưng điều tôi thực sự muốn thấy là một đặc tả mô tả các khả năng và như vậy. ..
andrews Something

Vẫn còn sớm;)
Rinzwind

Ai đó cho tôi xin tumblr.
Khurshid Alam

Câu trả lời:


34

Bạn bè tác giả ở đây.

Thật vậy, như bạn nghi ngờ, cần có hỗ trợ trong Tài khoản trực tuyến Ubuntu trước khi có thể thêm hỗ trợ vào Bạn bè. Kiến trúc bạn bè phụ thuộc rất nhiều vào UOA để thực hiện tất cả ủy quyền và quản lý tất cả các khóa API cho chúng tôi. Ví dụ yêu thích của tôi là LinkedIn, vì cho đến nay, giao thức duy nhất được cộng đồng đóng góp. Plugin UOA chủ yếu chỉ là hai tệp XML, cộng với một chút thủ thuật autoconf, trông giống như thế này. (cuộn xuống một chút cho khác biệt, trong đó hiển thị rõ ràng từng điều cần được thêm vào để LinkedIn hoạt động).

Khi bạn đã thực hiện tương tự cho giao thức của mình, bạn cần đề xuất hợp nhất với lp: plugin-account và yêu cầu Mardy xem xét, phê duyệt và hợp nhất chúng. Khi đã có, bạn có thể bắt đầu viết plugin bạn bè, sẽ được viết bằng Python 3.

Giờ đây, một trong những cải tiến lớn , quan trọng mà Friends giới thiệu trên Gwibber là việc sử dụng các lớp con. Trong mã Gwibber ban đầu, hoàn toàn không có gì được thực hiện với các lớp con, vì vậy mỗi plugin giao thức mới là một bản sao và dán hackjob khổng lồ của các bit khác nhau của chức năng cấp thấp. Khi triển khai Friends, tôi đã hết sức cẩn thận để trích xuất các chức năng phổ biến thành một siêu lớp, có thể dễ dàng phân lớp và sửa đổi. Các siêu lớp cũng có khá nhiều tài liệu, mà bạn nên tham khảo khi bắt đầu. Thật không may, chúng tôi chưa thiết lập nhân sư để xuất bản chúng ở bất cứ đâu, vì vậy bây giờ bạn sẽ phải đọc mã.

Một số điều quan trọng cần lưu ý là tên của lớp của bạn phải khớp với "tên người dùng" được sử dụng, không phân biệt chữ hoa chữ thường. Vì vậy, nếu bạn đã xác định tên người dùng là instagram, thì bạn nên tạo tệp protocols/instagram.pyvà đặt tên lớp Python của bạn Instagram.

Hai phương thức quan trọng nhất mà bạn hoàn toàn phải thực hiện để plugin của bạn thực sự làm bất cứ điều gì, được gọi _whoamireceive. Đây là những tài liệu tốt trong cơ sở (được liên kết ở trên), nhưng về cơ bản, _whoamiphương thức này sẽ được gọi tự động và được chuyển qua một lệnh đại diện cho một blob JSON đã được phân tích cú pháp được cung cấp cho chúng tôi khi dịch vụ xác thực xảy ra. Nếu bạn may mắn, tên chính tả đó sẽ chứa tên người dùng, id người dùng và tên hiển thị trên Instagram của bạn, nhưng nếu không, bạn sẽ cần thực hiện cuộc gọi API thứ cấp để thu thập thông tin đó. Vui lòng xem Facebook._whoamiví dụ về giao thức không cung cấp thông tin trước và yêu cầu một lệnh gọi API bổ sung từ bên trong phương thức và xemTwitter._whoami cho một ví dụ về một giao thức cung cấp cho chúng tôi tất cả các chi tiết chúng tôi cần ngay trước mắt.

Sau đó, receivephương thức này chịu trách nhiệm thực hiện cuộc gọi API thăm dò dịch vụ cho các tin nhắn mới. Đây là dạng tự do hơn một chút, vì mỗi API REST hơi khác nhau, vì vậy bạn nên tham khảo tài liệu API của trang web để tìm hiểu chính xác những gì cần phải thực hiện ở đây. Trong http.py, chúng tôi cung cấp UploaderDownloadercác lớp giúp dễ dàng thực hiện các cuộc gọi API REST và thậm chí có thể phân tích các phản hồi của máy chủ JSON cho bạn. Điều quan trọng là sử dụng các lớp tiện lợi này vì chúng bao bọc libsoup, được cấu hình để tôn vinh các cài đặt proxy Gnome (bạn có thể nhớ lại mức độ hỗ trợ proxy của Gwibber khủng khiếp như thế nào, hiện tại chúng tôi đã sửa tất cả).

Khi bạn đã nhận được phản hồi API từ máy chủ, bạn cần lưu trữ nó trong DeeModel của chúng tôi (nơi Gwibber đã sử dụng một blob JSON được đổ vào db sqlite để lưu trữ thư của bạn, chúng tôi đang sử dụng DeeModel, về cơ bản chỉ là cơ sở dữ liệu chia sẻ trạng thái trên DBus, giúp nhiều khách hàng dễ dàng hiển thị dữ liệu tin nhắn một cách dễ dàng). Chúng tôi gọi hành động lưu trữ một thông điệp mới là "xuất bản" và chúng tôi cung cấp một phương thức tiện lợi cho nó tại Base._publish. Về cơ bản, tất cả những gì bạn phải làm là điền vào chỗ trống ở đây, đảm bảo càng nhiều thông tin càng tốt sẽ được điền vào càng nhiều cột càng tốt. Các đối số có thể có cho _publish được xác định trong lược đồ và một lần nữa bạn có thể tham khảo các plugin hiện có để xem cách chúng thực hiện.

Khi bạn đã đạt được điều này, bạn sẽ có đủ để có thể kiểm tra nó. Chúng tôi cung cấp một vài công cụ trong toolsthư mục để giúp dễ dàng chạy mã của bạn từ bên trong cây nguồn, vì vậy bạn không phải cài đặt nó vào hệ thống mỗi khi bạn muốn thay đổi. Những gì bạn nên làm là mở một thiết bị đầu cuối, cd vào thư mục gốc của cây nguồn và chạy ./tools/debug_slave.py. Những gì nó kết nối với DeeModel và chỉ hiển thị mọi thứ xảy ra với nó, vì vậy bạn có thể thấy các thông báo xuất hiện trực tiếp khi chúng đến. Sau đó, trong một thiết bị đầu cuối thứ hai, cd lại vào thư mục gốc của cây nguồn, và chạy ./tools/debug_live.py instagram receivevà sẽ tự kích hoạt phương thức Instagram.receive và hiển thị một loạt các đầu ra gỡ lỗi để cho bạn biết về những gì đang diễn ra (bạn có thể rắc mã của mình bằng các cuộc gọi đếnlog.debug("hi") nếu bạn muốn xem chi tiết hơn nữa về những gì xảy ra).

Ồ, và nếu bạn vẫn đang đọc, plugin Linkedin chưa hạ cánh trong thân cây, nhưng bạn vẫn có thể xem nó ở đây.

Nếu bạn có bất kỳ câu hỏi nào khác, tôi luôn ở #gwibber trên freenode và tôi cũng cảm thấy khá mạnh mẽ rằng codebase mới dễ đọc hơn và được ghi lại tốt hơn bất cứ điều gì Gwibber từng có, vì vậy vui lòng đọc mã ở đó và nó không nên ' t quá khó để học bằng ví dụ. Facebook và Twitter là đầy đủ nhất.

Cảm ơn bạn đã quan tâm đến bạn bè!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.