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.py
và đặ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 _whoami
và receive
. Đâ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, _whoami
phươ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._whoami
ví 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 đó, receive
phươ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 Uploader
và Downloader
cá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 tools
thư 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 receive
và 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è!