现在是2019年。你听说过机器人。有聊天机器人、电子邮件机器人、网络抓取机器人和社交媒体机器人。你创建机器人了吗?这非常容易。可能是它们到处都是的原因。加入机器人霸主的行列,拥抱他们。
在本文中,我将向您展示如何利用Python自动与Twitter、Reddit和Instagram帐户交互。
本演练使用Python作为其首选语言。与其他语言相比,Python的易用性优势超过了它的任何速度缺陷。几乎可以为任何操作系统下载Python。使用您选择的编辑器。
Python发行版与名为
pip. 在撰写本文时,有超过168000个库可以使用
pip. 对于您今天将创建的机器人程序,只需要三个。
从命令行,您可以使用这三行安装所需的库。
pip install --upgrade InstagramAPIpip install --upgrade tweepy pip install --upgrade praw现在您可以在需要的地方导入这些库。
一位聪明的哲学家曾经说过:“秘密,秘密是没有乐趣的。秘密,秘密会伤害别人。“尊重地说,机器人需要秘密。设置bot的下一步是允许它们访问每个站点的API。为此,您需要一个应用程序密钥或密码。
当你收集钥匙,秘密,代币,和更多(听起来像一个有趣的游戏!),将它们全部放入一个名为凭证.py“此文件看起来如下所示:
# keystwitter_c***umer_key = ''twitter_c***umer_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机器人节点.js将向您展示如何创建您的Twitter应用程序。请注意,Twitter将需要一些时间来验证您的帐户,并确保您没有创建垃圾邮件帐户。
完成这些步骤后,将使用者密钥、使用者机密、访问令牌和访问令牌机密复制到凭证.py文件。
获取Reddit客户端ID和secret与Twitter非常相似。您需要将应用程序注册为Reddit用户代理。做完这些之后,你绝对应该在简历上写上“Reddit用户代理”。
登录您选择的Reddit帐户。导航到“应用程序首选项”页,然后单击“创建其他应用程序”。给你的用户代理起个有用的名字。为应用程序选择脚本。关于URL可以留空。填写重定向框的任何地址。
按“创建应用程序”后,以下屏幕将显示应用程序列表。应用程序名称下的数字表示客户机ID,客户机机密位于该ID下面。将这些值复制到凭证.py文件。
Instagram访问不同于Twitter和Reddit。你不用注册应用程序,而是使用用户名和密码。我建议创建一个单独的公共帐户,并将这些详细信息用于您的bot。
使用praw需要两个步骤。首先,设置访问权限是对praw的Reddit方法的单个函数调用。然后,使用初始化对象,使用new()方法搜索子reddit。
import prawfrom 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 = 10for submission in my_reddit.subreddit(sub_name).new(limit=max_posts):print(submission.title)更改
sub_name变量从不同的子站点获取帖子。而不是
new(),其他方法,如
hot()可以获得职位。
使用Instagram API的第一步是使用客户机ID和密码设置对象。之后,直接调用login()方法完成设置。
from InstagramAPI import InstagramAPIfrom credentials import instagram_client_id, instagram_client_secretmy_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响应循环并找到与每个post相关联的媒体。下面是一个从JSON响应中提取信息的实现:
def get_images_from_hashtag(hashtag, num_images):images = []get_hashtag = my_insta_api.getHashtagFeed(hashtag)if get_hashtag == False:return imagesfor item in my_insta_api.LastJson['items']:if item['media_type'] == 1 and 'image_versi***2' in item.keys():candidate = get_largest_image(item['image_versi***2']['candidates'])# get image filename = self.save_image_from_candidate(candidate['url'])if filename != '':# get status, save as tuplecaption = get_caption(item)images.append((filename, caption))if len(images) >= num_images:break return images此函数中使用了两个助手函数。Instagram在JSON响应中发送一个图像“候选者”列表。选择这些图像中最大的一个,以便以最高分辨率显示媒体。
def get_largest_image(candidates):candidate = {}pixels = 0for cand in candidates:# pick the highest resolution oneres = cand['height']*cand['width']if res > pixels:pixels = rescandidate = candreturn candidate其次,一旦找到指向图像的链接,您就可以通过将内容写入文件来本地保存图像。使用
requests图书馆使这变得简单明了。
def save_image_from_candidate(url): filename = '' resp***e = requests.get(url) # check the resp***e status code, 200 means good if resp***e.status_code == 200: filename = url.split("/")[-1].split('?')[0] with open(filename, 'wb') as f: f.write(resp***e.content) return filename首先,你需要使用你的秘密和密钥设置Twitter访问。
import tweepyfrom credentials import *tw_auth = tweepy.OAuthHandler(twitter_c***umer_key, twitter_c***umer_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_hashtagInstagram机器人早期的功能是在推特上发布图片和字幕。
另外,你的Twitter机器人可以在Reddit上搜索新的帖子,也可以在tweet上发布这些帖子。将这两种功能放在一起,如下所示:
# use r/<hashtag> for reddit search# and #<hashtag> for instagram searchhashtag = 'technology'num_posts = 5# tweet reddit inforeddit_posts = my_reddit.subreddit(hashtag).new(limit=num_posts)for submission in reddit_posts:title = submission.titleurl = '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 mediamedia_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所以,现在你有一堆代码可以把媒体从一个站点拉到另一个站点。你也可以混搭。拉推特并发布到Reddit。收集Instagram图片发布到subreddits。做一个机器人,成为真正互联网的一部分。
最后,要完全自动化这个过程,您需要让bot在服务器上循环运行。这可能是在你自己的电脑与时间安排。或者,掸掉你衣柜里的树莓皮,看看这些可爱的Twitter机器人项目。
...优点是这些语言支持面向对象编程(OOP)。OOP方法有助于使用对象对一个或一组程序进行建模。Ruby和Python的关键区别在于Ruby主要用于web开发,而Python主要用于各种应用程序,包括web开发。Python还常用于科学计算、数据科学应用...
...ve。此库可以部署到Android、iOS和通用Windows平台。Facebook、Instagram和其他大公司都在维护和使用它,所以你知道它是经过尝试和测试的。学习曲线并不容易,但一旦你能克服最初的困难,你就会拥有你所需要的所有力量和灵活性。...
... Python完全可以进行大规模web开发。Instagram是运行Python网络框架Django的最大网站。这可不是什么了不起的壮举,Instagram工程师李泽坤解释道: ...
... Uber、PayPal、Google、Facebook、Instagram、Netflix、Dropbox和Reddit都在开发和测试中使用Python。此外,Python还广泛应用于机器人和嵌入式系统(甚至可以用来控制arduino)。即使是用C和C++编写的遗留系统也很...
...哪怕只对其他人有用?一种方法是创建一个自动的Twitter机器人,用有用的描述发布图片。你可以手动完成…也可以用节点.js把它放在树莓皮上。继续读下去,看看是怎么做的。 ...
...尼尔·希夫曼本人。作为一名天生的教师,他给出了代码如何与机器学习算法交互的清晰示例。 ...
...意到谷歌搜索的变化了吗?或者说语音识别和语言翻译是如何变得更好的?我相信你没有错过亚马逊和Netflix等网站的个性化推荐。 ...
...家和所谓的“社会正义战士”,再到创建“唤醒黑人”等Instagram团体来影响少数民族的投票努力。还有很多其他的例子。 ...