Websocket을 사용하여 Misskey에서 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する文字
}
}))
자동으로 반응하기
반응 목록
커맨드 라인상에서 자신의 홈으로 흐르는 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する文字
}
}))
자동으로 반응하기
반응 목록
pip install websocket-client
import json
from websocket import create_connection
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する文字
}
}))
자동으로 반응하기
반응 목록
#!/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する文字
}
}))
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
}
}))
요약
스트리밍은 리벤지합니다.
그 외의 샘플 코드는 메모 정도에 써 있었습니다만 어딘가에서 도움이 되면 기쁘다.
잘못되었다면 댓글을 달아주세요.
링크
Reference
이 문제에 관하여(Websocket을 사용하여 Misskey에서 Twitter의 StreamingAPI를 의사 재현해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Sora1269/items/9b37d1ea4c9db2d21bc2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)