친구에게 새로운 서비스에 대한 지원을 추가하는 방법?


19

우분투에 새로운 프렌즈 앱이 상륙 하면서 타임 라인 에 인스 타 그램 에 대한 지원을 추가하는 것이 멋지다. 또한 스스로 찌를 수도 있다고 생각했지만 문서를 찾는 데 어려움을 겪고 있습니다.

각 프로토콜에서 무엇이 필요한지 설명하는 사양이 있습니까? 인증은 어떻게 작동합니까? 먼저 우분투 온라인 계정에 지원을 추가해야합니까, 아니면 친구들이 새로운 프로토콜을 등록 할 수있는 방법이 있습니까?

매우 새롭고 Google 이름이 매우 어려우므로 올바른 방향으로의 조언을 부탁드립니다.


이것은 내가 지금 찾을 수있는 최고입니다 : bugs.launchpad.net/ubuntu/+source/friends/+bug/1156979code.launchpad.net/~robru/gwibber/friends 그러나 사용 된 모든 것을 사용할 수있는 것처럼 보입니다. for Gwibber (?)
Rinzwind

지원되는 프로토콜에 대한 코드는 bazaar.launchpad.net/~super-friends/friends/trunk/files/head:/…에 있는 것 같습니다. 그러나 제가 실제로보고 싶은 것은 기능 등을 설명하는 사양입니다. ..
andrewsomething

아직 초기입니다;)
Rinzwind

누군가 나에게 텀블러 PLZ를 줘.
Khurshid Alam

답변:


34

친구가 여기에 작성합니다.

실제로, 의심 한대로, 우분투 온라인 계정에서 지원이 필요합니다. Friends 아키텍처는 모든 권한 부여를 수행하고 모든 API 키를 관리하기 위해 UOA에 크게 의존합니다. 제가 가장 좋아하는 예는 LinkedIn입니다. 지금까지 커뮤니티가 기여한 유일한 프로토콜이기 때문입니다. UOA 플러그인은 주로 두 개의 XML 파일과 약간의 autoconf 트릭입니다. (diff를 위해 조금 아래로 스크롤하면 LinkedIn이 작동하기 위해 추가해야 할 모든 것을 명확하게 보여줍니다).

프로토콜에 대해 동일한 작업을 수행 한 후에는 lp : account-plugins에 대한 병합을 제안하고 Mardy가이를 검토, 승인 및 병합하도록해야합니다. 일단 설치되면 파이썬 3으로 작성된 friends 플러그인을 작성할 수 있습니다.

Friends가 Gwibber를 통해 도입 한 주요 개선 사항 중 하나 는 하위 클래스 사용입니다. 오리지널 Gwibber 코드에서는 서브 클래스로 아무 것도 수행하지 않았기 때문에 모든 새로운 프로토콜 플러그인은 다양한 저수준 기능 의 거대한 복사 및 붙여 넣기 핵 작업이었습니다. Friends를 구현할 때 공통 기능을 수퍼 클래스로 추출하는 데 세심한주의를 기울였습니다. 수퍼 클래스는 또한 상당히 많은 docstring을 가지고 있으며, 시작할 때 참조해야합니다. 불행히도 우리는 스핑크스를 아직 어디에도 게시하지 않도록 설정하지 않았으므로 지금은 코드를 읽으면됩니다.

명심해야 할 몇 가지 중요한 사항은 클래스 이름이 대소 문자를 구분하지 않고 사용 된 "제공자 이름"과 일치해야한다는 것입니다. 따라서 providername을로 정의한 경우 instagram파일을 작성하고 protocols/instagram.pyPython 클래스의 이름을 지정해야합니다 Instagram.

플러그인이 실제로 무엇인가를 수행하기 위해 반드시 구현해야하는 가장 중요한 두 가지 방법은 _whoami및 이라고 receive합니다. 이것들은 base.py (위에 링크되어 있음)에 잘 설명되어 있지만 기본적으로 _whoami메소드가 자동으로 호출되며 인증이 발생할 때 서비스에 의해 이미 구문 분석 된 JSON Blob을 나타내는 dict에 전달됩니다. 운이 좋으면 해당 dict에 Instagram 사용자 이름, 사용자 ID 및 표시 이름이 포함되지만 그렇지 않은 경우 해당 정보를 수집하려면 보조 API 호출을 작성해야합니다. 참조하시기 바랍니다 Facebook._whoami앞까지 정보를 제공하지 않은 프로토콜의 예와 방법 내에서 추가 API 호출을 요구하고, 참조Twitter._whoami 우리에게 필요한 모든 세부 사항을 미리 알려주는 프로토콜의 예입니다.

그 후, receive메소드는 새 메시지에 대해 서비스를 폴링하는 API 호출을 작성합니다. 이것은 모든 REST API가 약간 다르기 때문에 조금 더 자유 롭습니다. 여기서 웹 사이트의 API 문서를 참조하여 정확히 수행해야 할 작업을 파악해야합니다. http.py에서는 REST API를 쉽게 호출하고 JSON 서버 응답을 구문 분석 할 수있는 클래스 UploaderDownloader클래스를 제공 합니다. 이 편리한 클래스 libsoup는 그놈 프록시 설정을 준수하도록 구성되어 있기 때문에이 클래스를 사용하는 것이 중요합니다 (Gwibber의 프록시 지원이 항상 얼마나 끔찍한지를 기억할 수도 있습니다).

서버에서 API 응답을 받으면 DeeModel에 저장해야합니다 (Gwibber는 메시지 저장을 위해 sqlite db에 덤프 된 JSON blob을 사용했습니다). 우리는 기본적으로 데이터베이스 인 DeeModel을 사용하고 있습니다. DBus에서 상태를 공유하므로 여러 클라이언트가 메시지 데이터를 쉽게 표시 할 수 있습니다). 우리는 새 메시지를 "게시"저장하는 행위를 호출하며, 편리한 메시지를 제공합니다 Base._publish. 기본적으로 여기에 빈칸을 채우는 것만으로 최대한 많은 정보를 최대한 많은 열에 채워야합니다. _publish에 대한 가능한 인수는 schema에 정의되어 있으며 기존 플러그인을 참조하여 이들이 어떻게 작동하는지 확인할 수 있습니다.

이 과정을 마치면 테스트 할 수있을 것입니다. tools소스 트리 내에서 코드를 쉽게 실행할 수 있도록 디렉토리에 몇 가지 도구를 제공 하므로 변경할 때마다 시스템에 코드를 설치할 필요가 없습니다. 터미널 하나를 열고 소스 트리의 루트로 cd 한 다음 실행하십시오 ./tools/debug_slave.py. 그것이하는 일은 DeeModel에 연결하고 그에 발생하는 모든 것을 표시하기 때문에 메시지가 들어 오면 실시간으로 나타나는 메시지를 볼 수 있습니다. 그런 다음 두 번째 터미널에서 소스 트리의 루트로 다시 cd를 실행 ./tools/debug_live.py instagram receive하여 Instagram.receive 메소드를 수동으로 트리거하고 디버깅 결과를 표시하여 실행중인 상황을 알려줍니다 (호출로 코드를 뿌릴 수 있음)log.debug("hi") 발생하는 일에 대한 자세한 내용을 보려면).

아, 그리고 여전히 읽고 있다면 링크 된 플러그인이 아직 트렁크에 도착하지 않았지만 여전히 여기에서 볼 수 있습니다.

다른 질문이 있으시면 항상 #node에 freenode를 사용하고 있으며 새로운 코드베이스가 Gwibber보다 훨씬 더 읽기 쉽고 문서화되어 있다고 강력하게 생각합니다. 따라서 거기에있는 코드를 읽으십시오. ' 예를 들어 배우기가 너무 어렵습니다. Facebook과 Twitter가 가장 완벽합니다.

Friends에 관심을 가져 주셔서 감사합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.