Discord에 Twitter의 타임라인을 표시합니다.

개시하다


안녕하세요, 저는retact입니다.
다들 디스코드요?
제가 사용하는 서버는 분보가 있어서 여러분이 하는 일을 공유할 수 있어서 기쁘지만 요즘 주변 사람들이 연락이 없어서 트위터가 많이 진전되고 있습니다.
이렇게 하면 좀 외로울 것 같아서 여러분들이 Tweet에 디스코드에 나왔으면 좋겠다고 생각했는데 지저분했지만 실사해 봤어요.
※ 이번에 사용한 트위터 스트림 API의 키 때를 트위터로 추출한 것은 잘 모르기 때문에 공개된 때 추출과 웹훅스 사용 출력만 열거합니다.
설치된 전선을 여기에 놓아라.
https://github.com/retact/twi-cord
또 기사 내용과 코드에 이상한 점이나 이렇게 해야 할 부분이 있다면 몰래 알려주시면 좋을 것 같아요.

트위터를 읽기 위해서.


우선 타임라인을 추출하기 위해서는 자신의 트위터 계정으로 API 키와 방문 영패를 받아야 합니다.
여기를 참고해 트위터의 API 사용 신청을 하면 (UI는 조금 다르지만) 순조롭게 진행될 수 있다.
여기서 얻은 거예요.
○ Consumer API key
○ Consumer API secret key
○ Access token
○ Access token secret
의 네 개를 잠시 후에 사용합니다.

Twitter Streaming API


이번에는 트위터 스트리밍 API를 사용하기 위해 Tweepy 라이브러리를 사용했다.
https://docs.tweepy.org/en/v3.5.0/index.html

Tweet을 내보냅니다.


config.아까 py에서 얻은 거예요.
○ Consumer API key
○ Consumer API secret key
○ Access token
○ Access token secret
트위터 코드라고 써.내가 py를 실행하고 싶다면 트위터가 실행 화면에 나타날 것이다.
config.py
CONFIG = {
    "CONSUMER_KEY": "Consumer API keyを記入してください",
    "CONSUMER_SECRET": "Consumer API secret keyを記入してください",
    "ACCESS_TOKEN": "Access tokenを記入してください",
    "ACCESS_SECRET": "Access token secretを記入してください",
}
twi-cord.py
import tweepy
from config import CONFIG

auth = tweepy.OAuthHandler(CONFIG["CONSUMER_KEY"], CONFIG["CONSUMER_SECRET"])
auth.set_access_token(CONFIG["ACCESS_TOKEN"], CONFIG["ACCESS_SECRET"])
# APIインスタンスを作成
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

# フォローしているユーザーのwatch_listを作成
followee_ids = api.friends_ids(screen_name=api.me().screen_name)
watch_list = [str(user_id) for user_id in followee_ids]
watch_list.append(str(api.me().id))

# デフォルトのアクセスレベルではfollowには5000人まで指定できるため
assert(len(watch_list) <= 5000)

class MyStreamListener(tweepy.StreamListener):
    def on_status(self, status):
	# @ツイートは表示しない.
        if "@" in status.text:
            pass
        else:
            print('-------------------------------------------')
            print('name:' + status.user.name)
            print(status.text)

myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
myStream.filter(follow=watch_list)
개인 프라이버시 관계에서는 대부분 숨겨져 있는데, 다음 관심 있는 사람들의 Tweet이 표시될 것 같다.

웹훅으로 디스코드에 난잡하게 던지다.


어쨌든 디스코드에 타임라인을 띄우려고 해서 이번에는 웹훅을 사용했다.

Discord를 사용하여 URL 생성


내가 이해하지 못하는 사람은 이곳을 참고하여 생성할 수 있다.
○ Intro to Webhooks
https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
여기서 생성된 URL은 나중에 사용됩니다.
웹훅스의 구조를 알고 싶은 사람여기.은 참고할 수 있다.

Discord에 Tweet 표시


방금 기술한 코드에 웹훅으로 보낸 부분을 더하다.
config.py
CONFIG = {
    "CONSUMER_KEY": "Consumer API keyを記入してください",
    "CONSUMER_SECRET": "Consumer API secret keyを記入してください",
    "ACCESS_TOKEN": "Access tokenを記入してください",
    "ACCESS_SECRET": "Access token secretを記入してください",
+   "WEBHOOK_URL": "Webhook URLを記入してください ",
}
twi-cord.py
import tweepy
+import requests
+import json
from config import CONFIG

auth = tweepy.OAuthHandler(CONFIG["CONSUMER_KEY"], CONFIG["CONSUMER_SECRET"])
auth.set_access_token(CONFIG["ACCESS_TOKEN"], CONFIG["ACCESS_SECRET"])
# APIインスタンスを作成
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

+webhook_url = CONFIG["WEBHOOK_URL"]

# フォローしているユーザーのwatch_listを作成
followee_ids = api.friends_ids(screen_name=api.me().screen_name)
watch_list = [str(user_id) for user_id in followee_ids]
watch_list.append(str(api.me().id))

# デフォルトのアクセスレベルではfollowには5000人まで指定できるため
assert(len(watch_list) <= 5000)

class MyStreamListener(tweepy.StreamListener):
    def on_status(self, status):
	# @ツイートは表示しない.
        if "@" in status.text:
            pass
        else:
+	    # ユーザーの情報を取得
+	    user_id = status.user.id
+           user = api.get_user(user_id)
+           main_content = {
+                  'username': status.user.name,
+                  'avatar_url': user.profile_image_url_https,
+                  'content': status.text
+           }
+           headers = {'Content-Type': 'application/json'}
+           response = requests.post(webhook_url, json.dumps(main_content), headers=headers)

            print('-------------------------------------------')
            print('name:' + status.user.name)
            print(status.text)

myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
myStream.filter(follow=watch_list)
개인의 프라이버시는 대부분 숨겨져 있기 때문에 잘 보이기는 어렵지만 이렇게 표시될 것이다.


트위터를 보는 게 힘들어서 트위터를 읽을 수 있는 어플을 계속 찾고 있는데 디스코드에 트위터를 던지면 그다음에는 읽을 수 있는 Bot만 하게 되니까 이 기사를 참고해 실제 트위터를 읽어보세요.
https://qiita.com/Sashimimochi/items/aad6bcfa2d6096212d4c
트위터는 아니지만 읽어보니 좋다.
https://youtu.be/oMiyYVsAiI8

끝말


디스코드에 트위터 타임라인을 설치할 수 있지만 답변이 잘 이뤄지지 않아 트위터로 사용하려면 다른 봇을 만들어야 한다.
단지 설치가 수월하기 때문에 목소리로만 Tweet을 읽으려는 사람에게는 딱 좋은 것 같아요.
자물쇠가 낀 트윗이 올라왔지만, 개인 프라이버시상 공용 서버에 타임라인을 유포하는 것은 좋지 않다고 판단됐으니 사용법에 유의해야 한다.

참고 문헌


https://blog.hatena.ne.jp/login?blog=https%3A%2F%2Fkivantium.hateblo.jp%2Fentry%2F2020%2F04%2F15%2F235422

좋은 웹페이지 즐겨찾기