จะเพิ่มการรองรับบริการใหม่ ๆ ให้กับเพื่อนได้อย่างไร?


19

ด้วยการเชื่อมโยงไปถึงเพื่อน - แอพใหม่ใน Ubuntu มันเกิดขึ้นกับฉันว่าการเพิ่มการสนับสนุนสำหรับ Instagramในไทม์ไลน์จะยอดเยี่ยม ฉันก็คิดว่าฉันอาจจะแทงเองด้วยตัวเอง แต่ฉันมีปัญหาในการหาเอกสารใด ๆ

มีสเป็คอธิบายสิ่งที่ต้องการจากแต่ละโปรโตคอลหรือไม่? รับรองความถูกต้องทำงานอย่างไร จะต้องเพิ่มการรองรับลงในบัญชีอูบุนตูออนไลน์ก่อนหรือมีวิธีให้เพื่อนลงทะเบียนโปรโตคอลใหม่หรือไม่?

มันใหม่มากและมีชื่อ Google ยากมากดังนั้นพอยน์เตอร์ในทิศทางที่ถูกต้องจะได้รับการชื่นชม


นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถหาได้ในตอนนี้: bugs.launchpad.net/ubuntu/+source/friends/+bug/1156979และcode.launchpad.net/~robru/gwibber/friendsแต่ดูเหมือนว่าคุณจะสามารถใช้ทุกอย่างที่ใช้ สำหรับ Gwibber (?)
Rinzwind

รหัสสำหรับโปรโตคอลที่รองรับดูเหมือนจะมีชีวิตอยู่ใน: bazaar.launchpad.net/~super-friends/friends/trunk/files/head:/แต่สิ่งที่ฉันต้องการเห็นก็คือสเปคที่อธิบายถึงความสามารถและสิ่งนั้น ..
andrewsomething

ยังคงเป็นวันแรก;)
Rinzwind

มีคนให้ฉันด้วย tumblr
Khurshid Alam

คำตอบ:


34

เพื่อนผู้เขียนที่นี่

ตามที่คุณสงสัยว่าจำเป็นต้องมีการสนับสนุนในบัญชี Ubuntu ออนไลน์ก่อนที่จะสามารถเพิ่มการสนับสนุนลงในเพื่อนได้ สถาปัตยกรรมเพื่อนขึ้นอยู่กับ UOA เป็นอย่างมากเพื่อที่จะทำการอนุญาตและจัดการคีย์ API ทั้งหมดสำหรับเรา ตัวอย่างที่ฉันชอบคือ LinkedIn เพราะมันเป็นเพียงโปรโตคอลเดียวที่ชุมชนมีส่วนร่วม ปลั๊กอิน UOA ส่วนใหญ่เป็นเพียงไฟล์ XML สองไฟล์บวกกับเล่ห์เหลี่ยมเล็กน้อยของ autoconf ซึ่งมีลักษณะเช่นนี้ (เลื่อนลงเล็กน้อยเพื่อ diff ซึ่งจะแสดงทุกสิ่งที่จำเป็นต้องเพิ่มเพื่อให้ LinkedIn ทำงานอย่างชัดเจน)

เมื่อคุณทำเช่นเดียวกันกับโปรโตคอลของคุณคุณต้องเสนอการผสานกับ lp: account-plugins และรับ Mardy เพื่อตรวจสอบอนุมัติและรวมเข้าด้วยกัน หลังจากนั้นคุณสามารถเริ่มเขียนปลั๊กอินของเพื่อนซึ่งจะเขียนใน Python 3

ตอนนี้หนึ่งในการปรับปรุงที่สำคัญที่เพื่อนแนะนำให้กับ Gwibber คือการใช้คลาสย่อย ในรหัส Gwibber ดั้งเดิมไม่มีอะไรทำกับ subclasses ดังนั้นทุกโพรโทคอลปลั๊กอินใหม่จึงเป็นตัวคัดลอกและวางแฮ็กกี้ขนาดใหญ่ของฟังก์ชันระดับต่ำต่างๆ เมื่อใช้งานเพื่อนฉันใช้ความระมัดระวังเป็นอย่างมากในการแยกการทำงานทั่วไปลงในซูเปอร์คลาสซึ่งสามารถซับคลาสและแก้ไขได้ง่าย ซูเปอร์คลาสมีเอกสารค่อนข้างมากซึ่งคุณควรอ้างอิงเมื่อเริ่มต้นใช้งาน น่าเสียดายที่เรายังไม่ได้ตั้งสฟิงซ์เพื่อเผยแพร่สิ่งเหล่านั้นในที่ใด ๆ ดังนั้นคุณเพียงแค่ต้องอ่านรหัสในตอนนี้

สิ่งสำคัญที่ต้องจำไว้คือชื่อของชั้นเรียนของคุณจะต้องตรงกับ "ชื่อผู้ใช้" ที่ใช้โดยไม่คำนึงถึงขนาดตัวพิมพ์ ดังนั้นถ้าคุณกำหนด providername ที่จะinstagramแล้วคุณควรสร้างไฟล์และชื่อชั้นของคุณหลามprotocols/instagram.pyInstagram

ทั้งสองวิธีที่สำคัญที่สุดอย่างที่คุณต้องใช้ในการสั่งซื้อสำหรับปลั๊กอินของคุณจริงทำอะไรที่เรียกว่าและ_whoami receiveสิ่งเหล่านี้ได้รับการบันทึกไว้เป็นอย่างดีใน base.py (เชื่อมโยงด้านบน) แต่โดยทั่วไปแล้ว_whoamiวิธีการนั้นจะถูกเรียกโดยอัตโนมัติและส่งผ่านเป็น dict ที่แสดงถึง JSON blob ที่ได้รับการแจงแล้วซึ่งบริการของเราเมื่อมีการรับรองความถูกต้อง หากคุณโชคดีข้อความดังกล่าวจะมีชื่อผู้ใช้ Instagram, ชื่อผู้ใช้และชื่อที่แสดง แต่หากไม่ใช่คุณจะต้องทำการเรียก API รองเพื่อรวบรวมข้อมูลดังกล่าว โปรดดูFacebook._whoamiตัวอย่างของโปรโตคอลที่ไม่ได้ให้ข้อมูลล่วงหน้าและต้องการการเรียก API เพิ่มเติมจากภายในวิธีการและดูTwitter._whoami สำหรับตัวอย่างของโปรโตคอลที่ให้รายละเอียดทั้งหมดที่เราต้องการล่วงหน้า

หลังจากนั้นreceiveวิธีการดังกล่าวมีหน้าที่รับผิดชอบในการทำการเรียก API ที่โพลบริการสำหรับข้อความใหม่ อันนี้เป็นแบบฟรีอีกหน่อยเพราะ REST API ทุกอันแตกต่างกันเล็กน้อยดังนั้นคุณควรอ้างอิงเอกสาร API ของเว็บไซต์เพื่อที่จะทราบว่าต้องทำอะไรที่นี่ ใน http.py เราให้บริการUploaderและDownloaderคลาสที่ทำให้การโทร REST API เป็นเรื่องง่ายและยังสามารถแยกวิเคราะห์การตอบสนองของเซิร์ฟเวอร์ JSON สำหรับคุณ เป็นสิ่งสำคัญที่จะต้องใช้คลาสความสะดวกสบายเหล่านี้เพราะมันถูกห่อหุ้มlibsoupซึ่งได้รับการกำหนดค่าให้เคารพการตั้งค่าพร็อกซี GNOME (คุณอาจจำได้ว่าการสนับสนุนพร็อกซีของ Gwibber นั้นแย่ขนาดไหน

เมื่อคุณได้รับการตอบสนองจาก API จากเซิร์ฟเวอร์คุณจะต้องเก็บไว้ใน DeeModel ของเรา (ที่ Gwibber ใช้ JSON blob ที่ถูกทิ้งลงใน sqlite db สำหรับจัดเก็บข้อความของคุณเรากำลังใช้ DeeModel ซึ่งโดยทั่วไปเป็นเพียงฐานข้อมูล ที่แชร์สถานะข้าม DBus ทำให้ลูกค้าหลายรายสามารถแสดงข้อมูลข้อความได้อย่างง่ายดาย) เราเรียกการกระทำของการจัดเก็บข้อความใหม่ "เผยแพร่" Base._publishและเราให้วิธีการความสะดวกสบายได้ที่ โดยทั่วไปสิ่งที่คุณต้องทำคือเติมช่องว่างที่นี่ให้แน่ใจว่าได้กรอกข้อมูลให้มากที่สุดเท่าที่จะทำได้ อาร์กิวเมนต์ที่เป็นไปได้ของ _publish ถูกกำหนดไว้ในสคีมาและอีกครั้งคุณสามารถอ้างถึงปลั๊กอินที่มีอยู่เพื่อดูว่ามันทำอย่างไร

เมื่อคุณไปได้ไกลขนาดนี้แล้วคุณควรจะมีเพียงพอที่จะทดสอบได้ เรามีเครื่องมือสองสามตัวในtoolsไดเรกทอรีเพื่อให้ง่ายต่อการเรียกใช้รหัสของคุณจากภายในแผนผังแหล่งที่มาดังนั้นคุณไม่จำเป็นต้องติดตั้งลงในระบบทุกครั้งที่คุณต้องการเปลี่ยนแปลง สิ่งที่คุณควรทำคือการเปิดสถานีหนึ่ง, CD ./tools/debug_slave.pyไปยังรากของต้นไม้ที่มาและเรียกใช้ อะไรที่ไม่เชื่อมต่อกับ DeeModel และทุกอย่างเพียงแค่การแสดงที่เกิดขึ้นกับมันเพื่อให้คุณสามารถเห็นข้อความที่ปรากฏอยู่เช่นพวกเขามาใน. จากนั้นในขั้วสอง, CD ไปยังรากของต้นไม้แหล่งที่มาอีกครั้งและการทำงานเป็น./tools/debug_live.py instagram receiveและ ที่จะเปิดใช้งานวิธี Instagram.receive ด้วยตนเองและแสดงกลุ่มของการดีบักผลลัพธ์เพื่อบอกคุณเกี่ยวกับสิ่งที่เกิดขึ้นในขณะที่มันทำงาน (คุณสามารถโรยรหัสของคุณด้วยการโทรlog.debug("hi") หากคุณต้องการดูรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้น)

โอ้และถ้าคุณยังอ่านปลั๊กอินที่เชื่อมโยงอยู่ยังไม่ได้อยู่ในหีบ แต่คุณยังสามารถดูได้ที่นี่

หากคุณมีคำถามอื่น ๆ ฉันมักจะอยู่ใน #gwibber บน freenode และฉันก็รู้สึกค่อนข้างมั่นว่า codebase ใหม่นั้นสามารถอ่านได้และมีเอกสารที่ดีกว่าสิ่งที่ Gwibber เคยมีดังนั้นโปรดอ่านโค้ดที่อยู่ที่นั่นและไม่ควร ' อย่ายากเกินกว่าที่จะเรียนรู้ด้วยตัวอย่าง Facebook และ Twitter นั้นสมบูรณ์ที่สุด

ขอขอบคุณที่สนใจเพื่อน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.