날짜 범위에 대해 Python 및 Twitter API를 사용하여 오래된 트윗 삭제
GitHub Link of Jupyter Notebook
전제 조건:-
1. Twitter 데이터 아카이브:
각 트윗의 두 가지 속성을 얻으려면 트위터 데이터가 필요합니다.
I) 트윗 ID 및
II) 트윗 날짜
csv 파일이나 다른 형식에 이 두 항목이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.
트위터 데이터를 얻으려면 데스크탑 사이트를 사용하여 이것을 따르십시오.
또는
또는 설정 및 개인 정보 보호 -> 계정 -> 트위터 데이터 아카이브 다운로드에서 연결할 수 있습니다(요청 후 데이터를 다운로드할 수 있게 되기까지 최대 48시간이 소요됨).
2. Twitter API 자격 증명
기존 앱이 없는 경우 로 이동하여 새로 만드십시오.
앱이 생성된 후 "세부 정보"로 이동하여 읽기, 쓰기 및 쪽지 권한이 할당되었는지 확인하십시오. 그렇지 않으면 편집하고 변경하십시오.
그런 다음 소비자 API 키와 액세스 토큰을 생성해야 합니다.
다운로드한 Twitter 데이터 처리:-
트위터 데이터를 추출한 후 두 개의 폴더를 찾을 수 있습니다. 하나는 데이터이고 다른 하나는 자산입니다. HTML 파일을 사용하여 오프라인에서 트윗을 탐색할 수 있습니다.
코드를 사용하기 전에 assets 폴더 안에 있는 tweets.js 파일을 변경해야 합니다.
현재 트위터 데이터 다운로드 서비스는 tweet.js 파일 내의 모든 트윗 자산을 개체 배열로 나열합니다. 이 파일을 파이썬에서 읽어야 하므로 JSON 파일로 만들어야 하므로 첫 번째 줄을 제거합니다.
window.YTD.tweet.part0 = [ {
그리고 그것을 교체
{"data": [ {
마지막 줄에 추가 "}"를 추가하여 JSON 개체로 만들어야 하므로 파일의 마지막 줄은 다음과 같습니다.
} ]}
JSON 파일로 저장합니다(예: "editedTweet.js").
암호:-
Python jupyter 노트북은 GitHub에서 찾을 수 있습니다link.
1) 먼저 독립 실행형 twitter 패키지를 제거하고 Python 버전을 설치해야 합니다(일반 twitter 패키지에는 "twitter.Api()"메서드가 포함되어 있지 않으므로) Jupyter Notebook에서 직접 수행할 수 있습니다(필요합니다. 설치 후 노트북을 다시 시작하려면)
!pip uninstall twitter
!pip install python-twitter
또는 터미널에서 사용
pip uninstall twitter
pip install python-twitter
2) CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN_KEY 초기화,
ACCESS_TOKEN_SECRET 변수에 고유한 Twitter API 자격 증명을 사용하여 트윗 ID 문자열을 "deleteTweet(tweetId)"함수에 전달하면 해당 트윗이 삭제됩니다. 트윗 ID는 각 트윗에 대한 "id_str"로 JSON 파일에 있습니다.
# ==================================================================
# Import statements
# ==================================================================
import sys
import time
from datetime import datetime
import os
import twitter
from dateutil.parser import parse
import numpy as np
import pandas as pd
import json
# ==================================================================
# API Credentials
# ==================================================================
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_TOKEN_KEY = ""
ACCESS_TOKEN_SECRET = ""
# ==================================================================
# Initialize
# ==================================================================
api = twitter.Api(consumer_key = CONSUMER_KEY,
consumer_secret = CONSUMER_SECRET,
access_token_key = ACCESS_TOKEN_KEY,
access_token_secret = ACCESS_TOKEN_SECRET)
# ======================================================================================
# Function to delete tweet by ID
# ======================================================================================
def deleteTweet(tweetId):
try:
print("Deleting tweet #{0})".format(tweetId))
api.DestroyStatus(tweetId)
print("Deleted")
except Exception as err:
print("Exception: %s\n" % err)
3) Python에서 JSON 파일을 json 변수로 읽습니다.
myData = None
with open('editedTweet.json') as json_file:
myData = json.load(json_file)
이제 배열의 각 트윗에 대한 트윗 속성을 찾아볼 수 있습니다. 참고로 인덱스 0에 있는 요소의 내용을 인쇄했습니다. 여기서는 "created_at"및 "id_str"속성에만 관심이 있습니다.
{'tweet': {'created_at': 'Thu Sep 11 12:26:39 +0000 2014',
'display_text_range': ['0', '137'],
'entities': {'hashtags': [],
'symbols': [],
'urls': [{'display_url': 'fb.me/3oL0wLoge',
'expanded_url': 'http://fb.me/3oL0wLoge',
'indices': ['115', '137'],
'url': 'http://t.co/spMVNltxDk'}],
'user_mentions': []},
'favorite_count': '0',
'favorited': False,
'full_text': 'for galaxy y , galaxy pocket, galaxy ace, galaxy music, galaxy y dous lite and any other low end android device... http://t.co/spMVNltxDk',
'id': '510041733099712513',
'id_str': '510041733099712513',
'lang': 'en',
'possibly_sensitive': False,
'retweet_count': '0',
'retweeted': False,
'source': '<a href="http://www.facebook.com/twitter" rel="nofollow">Facebook</a>',
'truncated': False}}
4) 이제 삭제해야 하는 트윗의 ID가 있는 배열을 생성하기만 하면 됩니다. 따라서 삭제해야 하는 트윗의 날짜 범위를 선택하고 UTC 오프셋을 고려하는 것을 잊지 마십시오. "range_start"및 "range_end"를 사용합니다.
# Range (in UTC offset) within which tweets will be deleted
# =================================================================
range_start = datetime.strptime('Sep 10 00:00:00 +0000 2012','%b %d %H:%M:%S %z %Y')
range_end = datetime.strptime('Sep 10 00:00:00 +0000 2017','%b %d %H:%M:%S %z %Y')
# ==================================================================
# I am creating a list of tweet IDs for consideration, where tweetsToBeDeleted will be
# used for deleting tweet
# ==================================================================
tweetsToBeDeleted = []
tweetsToBeIgnored = []
for element in myData["data"]:
tweet_post_time = datetime.strptime(element["tweet"]["created_at"],'%a %b %d %H:%M:%S %z %Y')
if (tweet_post_time>= range_start and tweet_post_time<= range_end ):
tweetsToBeDeleted.append(element["tweet"]["id_str"])
else:
tweetsToBeIgnored.append(element["tweet"]["id_str"])
print(len(tweetsToBeDeleted),len(tweetsToBeIgnored))
5) 마지막으로 배열을 반복하고 "tweetsToBeDeleted"배열의 각 ID를 제거할 트윗에 대한 삭제 기능으로 전달할 수 있습니다.
for id in tweetsToBeDeleted:
deleteTweet(id)
Reference
이 문제에 관하여(날짜 범위에 대해 Python 및 Twitter API를 사용하여 오래된 트윗 삭제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/3zadessg/deleting-old-tweets-using-python-twitter-api-for-a-date-range-1a23텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)