เพื่อนผู้เขียนที่นี่
ตามที่คุณสงสัยว่าจำเป็นต้องมีการสนับสนุนในบัญชี Ubuntu ออนไลน์ก่อนที่จะสามารถเพิ่มการสนับสนุนลงในเพื่อนได้ สถาปัตยกรรมเพื่อนขึ้นอยู่กับ UOA เป็นอย่างมากเพื่อที่จะทำการอนุญาตและจัดการคีย์ API ทั้งหมดสำหรับเรา ตัวอย่างที่ฉันชอบคือ LinkedIn เพราะมันเป็นเพียงโปรโตคอลเดียวที่ชุมชนมีส่วนร่วม ปลั๊กอิน UOA ส่วนใหญ่เป็นเพียงไฟล์ XML สองไฟล์บวกกับเล่ห์เหลี่ยมเล็กน้อยของ autoconf ซึ่งมีลักษณะเช่นนี้ (เลื่อนลงเล็กน้อยเพื่อ diff ซึ่งจะแสดงทุกสิ่งที่จำเป็นต้องเพิ่มเพื่อให้ LinkedIn ทำงานอย่างชัดเจน)
เมื่อคุณทำเช่นเดียวกันกับโปรโตคอลของคุณคุณต้องเสนอการผสานกับ lp: account-plugins และรับ Mardy เพื่อตรวจสอบอนุมัติและรวมเข้าด้วยกัน หลังจากนั้นคุณสามารถเริ่มเขียนปลั๊กอินของเพื่อนซึ่งจะเขียนใน Python 3
ตอนนี้หนึ่งในการปรับปรุงที่สำคัญที่เพื่อนแนะนำให้กับ Gwibber คือการใช้คลาสย่อย ในรหัส Gwibber ดั้งเดิมไม่มีอะไรทำกับ subclasses ดังนั้นทุกโพรโทคอลปลั๊กอินใหม่จึงเป็นตัวคัดลอกและวางแฮ็กกี้ขนาดใหญ่ของฟังก์ชันระดับต่ำต่างๆ เมื่อใช้งานเพื่อนฉันใช้ความระมัดระวังเป็นอย่างมากในการแยกการทำงานทั่วไปลงในซูเปอร์คลาสซึ่งสามารถซับคลาสและแก้ไขได้ง่าย ซูเปอร์คลาสมีเอกสารค่อนข้างมากซึ่งคุณควรอ้างอิงเมื่อเริ่มต้นใช้งาน น่าเสียดายที่เรายังไม่ได้ตั้งสฟิงซ์เพื่อเผยแพร่สิ่งเหล่านั้นในที่ใด ๆ ดังนั้นคุณเพียงแค่ต้องอ่านรหัสในตอนนี้
สิ่งสำคัญที่ต้องจำไว้คือชื่อของชั้นเรียนของคุณจะต้องตรงกับ "ชื่อผู้ใช้" ที่ใช้โดยไม่คำนึงถึงขนาดตัวพิมพ์ ดังนั้นถ้าคุณกำหนด providername ที่จะinstagram
แล้วคุณควรสร้างไฟล์และชื่อชั้นของคุณหลามprotocols/instagram.py
Instagram
ทั้งสองวิธีที่สำคัญที่สุดอย่างที่คุณต้องใช้ในการสั่งซื้อสำหรับปลั๊กอินของคุณจริงทำอะไรที่เรียกว่าและ_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 นั้นสมบูรณ์ที่สุด
ขอขอบคุณที่สนใจเพื่อน!