Pythonを使用してTwitter、Instagram、およびRedditボットを構築する方法

Pythonを使用してTwitter、Instagram、およびRedditボットを構築する方法

2019年です。ボットについて聞いたことがあるでしょう。チャットボット、電子メールボット、Webスクレイピングボット、およびソーシャルメディアボットがあります。ボットはもう作成しましたか?驚くほど簡単です。おそらくなぜ彼らはいたるところにいるのでしょう。ランクに参加して、ボットの大君主を受け入れましょう。





この記事では、Pythonを活用してTwitter、Reddit、Instagramのアカウントを自動的に操作する方法を紹介します。





Pythonでの作業

このウォークスルーでは、選択する言語としてPythonを使用します。 Pythonの使いやすさの利点は、他の言語と比較して速度の欠点を上回っています。 Pythonは、ほぼすべてのOSにダウンロードできます。使用する お好みのエディター





Pythonディストリビューションは、と呼ばれるユーティリティに関連付けられています

リングドアベルはどのように機能しますか
pip

。これを書いている時点で、168,000を超えるライブラリを使用してダウンロードできます。



pip

。今日作成するボットの場合、必要なのは3つだけです。

コマンドラインから、これらの3行を使用して必要なライブラリをインストールできます。





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

これで、必要に応じてこれらのライブラリをインポートできるようになります。

アプリケーションキーとシークレットの取得

賢明な哲学者はかつて「秘密、秘密は面白くない」と言った。秘密、秘密は誰かを傷つけます。」敬意を表して、ボットには秘密が必要です。ボットを設定する次のステップは、ボットが各サイトのAPIにアクセスできるようにすることです。これを行うには、アプリケーションキーまたはシークレットが必要です。





キー、シークレット、トークンなどを収集するとき(楽しいゲームのように聞こえます!)、それらすべてを「credentials.py」という1つのファイルに入れます。このファイルは次のようになります。

# 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など)をコミットしないでください。あなたは他の誰かにこれらの鍵と秘密を持たせたくありません。それらは理由から秘密と呼ばれています。

Twitterアクセス​​の設定

Node.jsを使用してTwitterボットを設定するためのガイドを確認して、Twitterアプリの作成方法を説明します。 Twitterは、アカウントを確認し、スパムアカウントを作成していないことを確認するのに時間がかかることに注意してください。

これらの手順を実行した後、コンシューマーキー、コンシューマーシークレット、アクセストークン、およびアクセストークンシークレットをcredentials.pyファイルにコピーします。

Redditアクセスの設定

RedditクライアントIDとシークレットの取得はTwitterと非常によく似ています。アプリをRedditユーザーエージェントとして登録する必要があります。これを行った後、あなたは絶対にあなたの履歴書に「Redditユーザーエージェント」を置くべきです。

ログイン 選択したRedditアカウントに。に移動します アプリ設定ページ[別のアプリを作成]をクリックします 。ユーザーエージェントに何か便利な名前を付けてください。 スクリプトを選択 あなたのアプリの目的のために。 aboutURLは空白のままにすることができます。リダイレクトボックスのアドレスを入力します。

お先にどうぞ アプリ作成を押します 、次の画面にアプリのリストが表示されます。アプリケーション名の下の数字はクライアントIDを表し、クライアントシークレットはその下にあります。これらの値をcredentials.pyファイルにコピーします。

Instagramアクセスの設定

InstagramへのアクセスはTwitterやRedditとは異なります。アプリを登録する代わりに、ユーザー名とパスワードを使用します。別のパブリックアカウントを作成し、それらの詳細をボットに使用することをお勧めします。

PrawでRedditにアクセスする

prawの使用は2段階のプロセスです。まず、アクセスの設定は、prawのRedditメソッドへの単一の関数呼び出しです。次に、初期化されたオブジェクトを使用して、new()メソッドを使用してsubredditの検索を実行します。

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

この関数で使用される2つのヘルパー関数があります。 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ボットプロジェクトをチェックしてください。

共有 共有 つぶやき Eメール FBIがHiveランサムウェアに対して警告を発した理由は次のとおりです

FBIは、特に厄介なランサムウェアについて警告を発しました。これが、Hiveランサムウェアに特に注意する必要がある理由です。

次を読む
関連トピック
  • プログラミング
  • Python
  • ソーシャルメディアボット
  • コーディングチュートリアル
著者について トム・ジョンセン(3件の記事が公開されました)

トムはフロリダ出身のソフトウェアエンジニア(フロリダマンに大声で叫ぶ)であり、執筆、大学フットボール(ゲーターズに行く!)、CrossFit、オックスフォードのコンマに情熱を注いでいます。

トムジョンセンからもっと

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください