Websocket을 사용하여 Misskey에서 Twitter의 StreamingAPI를 의사 재현해 보았습니다.

드디어 Twitter에서 StreamingAPI가 폐지되었습니다.
이에 따라 자신이 사용하게 된 Misskey에서 Websocket을 사용하여 API를 여러가지 두드려 보았습니다. 정보가 아직 적기 때문에 조금이라도 유용하면 다행입니다.
아래쪽에 샘플 코드도 있으므로 거기만으로도 좋으면.

개발 환경



macOS mojave 10.14 베타
파이썬 2.7.10

이번 목표



커맨드 라인상에서 자신의 홈으로 흐르는 Note를 실시간으로 취득, 표시한다.

준비



설치



이번에는 Websocket을 사용하여 씁니다.
필요한 패키지를 설치합니다.
pip install websocket-client

Token 취득



이번에는 쉽게 Token을 사용합니다.
이 Token이라는 것은 계정을 악용할 수 있으므로 제3자에게 결코 가르치지 않도록 하십시오.
토큰 획득[ホーム]→[右上の自分のアイコン]→[設定]→[API]

Token 사용



Token은 wss://misskey.xyz/?i=********의 ******* 부분으로 대체하여 사용합니다.

import



방금 설치한 것을 가져옵니다.
import json
from websocket import create_connection

작성한 코드(Sample Code)



main.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json
from websocket import create_connection

hosturl = "wss://misskey.xyz/?i=***************"#***の部分にToken
ws = create_connection(hosturl)

while True:
    content = json.loads(ws.recv())
    body = content['body']
    judge = body.get('renoteId', None)
    if judge is None:
        text = content['body']['text']
        username = content['body']['user']['username']
        id = content['body']['id']
        sentence = username + u"「" + text + u"」"
        print(sentence)
    else judge is not None:
        text = content['body']['renote']['text']
        username = content['body']['renote']['user']['username']
        sentence = u"Renote:" + username + u"「" + text + u"」"
        print(sentence)

UserStream 때처럼 깨끗하게 돌리는 방법을 모르기 때문에 while True: 로 돌리고 있습니다.
Renote와 Note를 구분하는 부분에서 잠시 고생했지만, 개인적으로는 비교적 깨끗하게 정리된 느낌입니다. 더 깨끗하게 할 수 있다고 생각합니다만 거기는 누군가에게 던집니다.
표시되는 방법은 이런 느낌입니다.


나중에 오류가 발생합니다.

덧붙여 : 이 코드 젠장 결함 얼룩이므로 추후에도 재작성합니다.
사용할 수없는 것은 없기 때문에 시험에 부디.



취득 가능한 것 일람



note



Body(실제로 취득한 것을 값에 게재하고 있으므로 어디까지나 참고까지 부디)



금형
설명


media
[]
사진의 유무

_renote
None

renoteId
None
renoteId

태그
[]
아마 해시태그적인 것

텍스트
문자열
투고 내용, 본문

viaMobile
부울
Misskey를 휴대폰으로 보는지 여부

userId
문자열
사용자 ID (이것은 내)

visibleUserIds
[]
볼 수 있는 사용자 ID(?)

visibility
문자열
공개 범위

다음
None

지오
None
위치 정보

mediaIds
[]

replyId
None
이것이 응답이라면 ID가 나올 것입니다.


사용자



금형
설명


username
문자열
사용자 이름

isCat
부울
고양이인지 여부

lastUsedAt
문자열

followersCount
int
팔로워 수

description
문자열
프로필 설명란

avatarUrl
문자열
프로프 아이콘 URL

bannerUrl
문자열
배너 URL

bannerColor
[R, G, B]
이로

id
문자열
사용자 ID

호스트
None

createdAt
문자열
시간

followingCount
int
팔로우

avatarColor
[]

pinnedNoteId
문자열

notesCount
int
Note 수

이름
문자열
사용자 이름


API에서 Note하는 샘플 코드


#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json
from websocket import create_connection

hosturl = "wss://misskey.xyz/?i=***************"
ws = create_connection(hosturl)

ws.send(json.dumps({
    "type": "api",
    "id": "sora114514",
    "endpoint": "notes/create",
    "data": {
        "text": "text"#ここにNoteする文字
    }
}))

자동으로 반응하기



반응 목록
  • htps : // 기주 b. 코 m / 슈이 / 밀 s y / b ぉ b / 뭐 r / src / 만약 ls / te-re c c-on. ts#L20-L31
  • import random
    action = random.choice(['like', 'love', 'laugh', 'hmm', 'surprise', 'congrats', 'pudding'])
            ws.send(json.dumps({
                "type": "api",
                "id": "114514114514",
                "endpoint": "notes/reactions/create",
                "data": {
                    "noteId": id,
                    "reaction": action
                }
            }))
    

    요약



    스트리밍은 리벤지합니다.
    그 외의 샘플 코드는 메모 정도에 써 있었습니다만 어딘가에서 도움이 되면 기쁘다.
    잘못되었다면 댓글을 달아주세요.

    링크


  • 공식 문서( htps : ///ss y. xy · cs / 자 / 아피 )
  • 좋은 웹페이지 즐겨찾기