날짜 범위에 대해 Python 및 Twitter API를 사용하여 오래된 트윗 삭제

13463 단어 pythontwitterapi
주어진 날짜 범위 내에서 이전 트윗을 삭제하려는 경우 이 게시물은 python-twitter 및 트위터 프로필에서 얻은 데이터를 사용하여 단계를 안내합니다.
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)

좋은 웹페이지 즐겨찾기