Python을 사용하여 Twitter, Instagram 및 Reddit 봇을 구축하는 방법

Python을 사용하여 Twitter, Instagram 및 Reddit 봇을 구축하는 방법

2019년입니다. 봇에 대해 들어보셨을 겁니다. 채팅 봇, 이메일 봇, 웹 스크래핑 봇, 소셜 미디어 봇이 있습니다. 아직 봇을 만드셨습니까? 의외로 쉽습니다. 아마도 그들이 도처에 있는 이유일 것입니다. 그들의 대열에 합류하여 봇 대군주를 포용하십시오.





이 기사에서는 Python을 활용하여 Twitter, Reddit 및 Instagram 계정과 자동으로 상호 작용하는 방법을 보여 드리겠습니다.





파이썬으로 작업하기

이 연습에서는 Python을 선택한 언어로 사용합니다. Python의 사용 용이성 이점은 다른 언어와 비교하여 속도 부족을 능가합니다. 거의 모든 OS용 Python을 다운로드할 수 있습니다. 사용하다 원하는 편집자 .





Python 배포판은 다음과 같은 유틸리티와 연결됩니다.

링 초인종은 어떻게 작동합니까
pip

. 이 글을 쓰는 시점에서 다음을 사용하여 다운로드할 수 있는 라이브러리가 168,000개가 넘습니다.



pip

. 오늘 만들 봇에는 3개만 필요합니다.

명령줄에서 이 세 줄을 사용하여 필요한 라이브러리를 설치할 수 있습니다.





pip install --upgrade InstagramAPI
pip install --upgrade tweepy pip install --upgrade praw

이제 필요한 위치에 이러한 라이브러리를 가져올 수 있습니다.

애플리케이션 키 및 비밀 얻기

현명한 철학자는 '비밀, 비밀은 재미가 없다. 비밀, 비밀은 누군가에게 상처를 줍니다.' 정중하게도 봇에게는 비밀이 필요합니다. 봇 설정의 다음 단계는 각 사이트의 API에 대한 액세스를 허용하는 것입니다. 이렇게 하려면 애플리케이션 키 또는 암호가 필요합니다.





키, 비밀, 토큰 등을 수집하면서(재미있는 게임처럼 들립니다!), 모두 'credentials.py'라는 단일 파일에 넣습니다. 이 파일은 다음과 같습니다.

# keys
twitter_consumer_key = ''
twitter_consumer_secret = ''
twitter_access_token = ''
twitter_access_token_secret = ''
reddit_client_id = ''
reddit_client_secret = ''
reddit_user_agent = ''
instagram_client_id = ''
instagram_client_secret = ''

매우 중요한 개인 정보 보호 제안: 이 파일에 소스 제어(예: Git)를 커밋하지 마십시오. 다른 사람이 이러한 키와 비밀을 갖는 것을 원하지 않습니다. 비밀이라고 불리는 이유가 있습니다.

트위터 액세스 설정

Node.js로 Twitter 봇을 설정하는 방법에 대한 가이드를 확인하여 Twitter 앱을 만드는 방법을 보여줍니다. Twitter는 계정을 확인하고 스팸 계정을 만들지 않는지 확인하는 데 시간이 걸립니다.

이러한 단계를 수행한 후 소비자 키, 소비자 암호, 액세스 토큰 및 액세스 토큰 암호를 credentials.py 파일에 복사합니다.

Reddit 액세스 설정

Reddit 클라이언트 ID와 비밀을 얻는 것은 Twitter와 매우 유사합니다. Reddit 사용자 에이전트로 앱을 등록해야 합니다. 이 작업을 수행한 후 이력서에 'Reddit 사용자 에이전트'를 반드시 넣어야 합니다.

로그인 선택한 Reddit 계정으로. 다음으로 이동합니다. 앱 환경 설정 페이지 그리고 다른 앱 만들기 클릭 . 사용자 에이전트의 이름을 유용한 것으로 지정하십시오. 스크립트 선택 앱의 목적을 위해. 정보 URL은 비워둘 수 있습니다. 리디렉션 상자의 주소를 입력합니다.

당신 후 앱 만들기를 눌러주세요 , 앱 목록과 함께 다음 화면이 표시됩니다. 애플리케이션 이름 아래의 숫자는 클라이언트 ID를 나타내며 클라이언트 암호는 그 아래에 있습니다. 이 값을 credentials.py 파일에 복사하십시오.

Instagram 액세스 설정

Instagram 액세스는 Twitter 및 Reddit과 다릅니다. 앱을 등록하는 대신 사용자 이름과 비밀번호를 사용합니다. 별도의 공개 계정을 만들고 해당 세부 정보를 봇에 사용하는 것이 좋습니다.

Praw로 Reddit에 액세스

praw를 사용하는 것은 2단계 프로세스입니다. 첫째, 액세스 설정은 praw의 Reddit 메서드에 대한 단일 함수 호출입니다. 그런 다음 초기화된 개체를 사용하여 new() 메서드를 사용하여 하위 레딧을 검색합니다.

import praw
from credentials import *
my_reddit = praw.Reddit(client_id=reddit_client_id, client_secret=reddit_client_secret, user_agent=reddit_user_agent)
sub_name = 'technology'
max_posts = 10
for submission in my_reddit.subreddit(sub_name).new(limit=max_posts):
print(submission.title)

변경

sub_name

다른 하위 레딧에서 게시물을 가져오는 변수입니다. 대신에

new()

, 다음과 같은 다른 방법

hot()

게시물을 얻을 수 있습니다.

InstagramAPI를 통해 Instagram 해시태그 검색

Instagram API를 사용하는 첫 번째 단계는 클라이언트 ID와 비밀로 개체를 설정하는 것입니다. 그 직후에 login() 메서드를 호출하여 설정을 완료합니다.

from InstagramAPI import InstagramAPI
from credentials import instagram_client_id, instagram_client_secret
my_insta_api = InstagramAPI(instagram_client_id,instagram_client_secret)
my_insta_api.login()

API를 사용하는 것은 Reddit에 비해 조금 더 복잡합니다. 이 예에서 스크립트는 getHashtagFeed를 사용하여 Instagram에서 매우 큰 JSON 응답 개체를 가져옵니다.

응답을 검색하여 스크립트는 캡션 텍스트를 찾은 다음 이를 보기 위해 화면에 출력합니다.

get_hashtag = my_insta_api.getHashtagFeed(hashtag)
if get_hashtag != False:
for item in my_insta_api.LastJson['items']:
if 'caption' in item.keys() and 'text' in item['caption'].keys():
caption = item['caption']['text']
print(caption)

소셜 미디어에 이미지 추가

앞으로 스크립트가 이 해시태그 피드에서 이미지를 가져오기를 원할 수 있습니다. 이렇게 하려면 JSON 응답을 반복하고 각 게시물과 연결된 미디어를 찾습니다. 다음은 JSON 응답에서 정보를 추출하기 위한 구현입니다.

def get_images_from_hashtag(hashtag, num_images):
images = []
get_hashtag = my_insta_api.getHashtagFeed(hashtag)
if get_hashtag == False:
return images
for item in my_insta_api.LastJson['items']:
if item['media_type'] == 1 and 'image_versions2' in item.keys():
candidate = get_largest_image(item['image_versions2']['candidates'])
# get image
filename = self.save_image_from_candidate(candidate['url'])
if filename != '':
# get status, save as tuple
caption = get_caption(item)
images.append((filename, caption))
if len(images) >= num_images:
break
return images

이 함수에는 두 가지 도우미 함수가 사용됩니다. Instagram은 JSON 응답에서 이미지 '후보' 목록을 보냅니다. 미디어가 최고 해상도로 표시되도록 이러한 이미지 중 가장 큰 이미지를 선택하십시오.

def get_largest_image(candidates):
candidate = {}
pixels = 0
for cand in candidates:
# pick the highest resolution one
res = cand['height']*cand['width']
if res > pixels:
pixels = res
candidate = cand
return candidate

둘째, 이미지에 대한 링크가 발견되면 콘텐츠를 파일에 작성하여 이미지를 로컬에 저장할 수 있습니다. 사용

requests

라이브러리는 이것을 간단하게 만듭니다.

def save_image_from_candidate(url):
filename = ''
response = requests.get(url)
# check the response status code, 200 means good
if response.status_code == 200:
filename = url.split('/')[-1].split('?')[0]
with open(filename, 'wb') as f:
f.write(response.content)
return filename

Tweepy로 미디어 트윗하기

먼저 비밀과 키를 사용하여 Twitter 액세스를 설정해야 합니다.

import tweepy
from credentials import *
tw_auth = tweepy.OAuthHandler(twitter_consumer_key, twitter_consumer_secret)
tw_auth.set_access_token(twitter_access_token, twitter_access_token_secret)
tw_api = tweepy.API(tw_auth)

일반 리트윗 봇을 만드는 것은 단 몇 줄로 완료됩니다.

for tweet in tweepy.Cursor(tw_api.search,q='MakeUseOf').items(10):
try:
tweet.favorite()
tweet.retweet()
time.sleep(2)
except tweepy.TweepError as e:
print(e.reason)
except StopIteration:
break

이 라이브러리로 다른 많은 작업을 수행할 수 있습니다. 이 연습을 마치기 위해 다음을 사용할 수 있습니다.

get_images_from_hashtag

이미지와 캡션을 트윗하기 위해 이전에 만든 Instagram 봇의 기능입니다.

또한 Twitter 봇은 Reddit에서 새 게시물을 검색하고 이를 트윗할 수도 있습니다. 이 두 기능을 모두 합치면 다음과 같습니다.

# use r/ for reddit search
# and # for instagram search
hashtag = 'technology'
num_posts = 5
# tweet reddit info
reddit_posts = my_reddit.subreddit(hashtag).new(limit=num_posts)
for submission in reddit_posts:
title = submission.title
url = 'www.reddit.com{}'.format(submission.permalink)
tweet_str = f'Reddit r/{sub} update:
{title} #{sub} {url}'
tweet_str = trim_to_280(tweet_str)
tw_api.update(tweet_str)
# tweet instagram media
media_info = get_images_from_hashtag(hashtag, num_posts)
for (filename, message) in media_info:
try:
tweet_str = trim_to_280(message)
tw_api.update_with_media(filename, status=tweet_str)
except tweepy.TweepError as e:
print(e.reason)
except StopIteration:
break

Python 기반 소셜 미디어 봇이 준비되었습니다!

이제 한 사이트에서 미디어를 가져와서 다른 사이트로 게시하는 많은 코드가 있습니다. 믹스 앤 매치도 할 수 있습니다. 트윗을 가져와 Reddit에 게시합니다. 하위 레딧에 게시할 Instagram 이미지를 수집합니다. 봇을 만들고 실제 인터넷의 일부가 되십시오.

마지막으로 이 프로세스를 완전히 자동화하려면 봇이 서버에서 루프로 실행되기를 원할 것입니다. 이것은 시간 스케줄러가 있는 자신의 컴퓨터에 있을 수 있습니다. 또는 옷장에 있던 오래된 Raspberry Pi의 먼지를 털어내고 Pi용 Twitter 봇 프로젝트를 확인하세요.

공유하다 공유하다 트위터 이메일 FBI가 하이브 랜섬웨어에 대한 경고를 발령한 이유

FBI는 특히 악성 랜섬웨어 변종에 대해 경고했습니다. Hive 랜섬웨어를 특히 조심해야 하는 이유가 여기에 있습니다.

다음 읽기
관련 항목
  • 프로그램 작성
  • 파이썬
  • 소셜 미디어 봇
  • 코딩 튜토리얼
저자 소개 톰 존슨(3편 게재)

Tom은 글쓰기, 대학 축구(Gators!), CrossFit 및 Oxford 쉼표에 대한 열정을 가진 플로리다(Florida Man에게 한마디)의 소프트웨어 엔지니어입니다.

톰 존슨이 참여한 작품 더보기

뉴스레터 구독

기술 팁, 리뷰, 무료 전자책 및 독점 거래에 대한 뉴스레터에 가입하십시오!

구독하려면 여기를 클릭하세요.