让我们从安装Tweepy开始。 通过终端使用pip命令非常简单:
pip install tweepy
接下来,您需要创建一个Twitter开发人员帐户 。
开发人员推特提供对Twitter API的访问权限,以便发布和分析推文,优化广告并创建独特的客户体验。 在此处查看Twitter API文档 。 您可以通过此API执行多个任务。 请参阅下面的其中一些:
发布和检索推文关注和取消关注用户发布直接消息
在能够使用Twitter API端点之前,创建一个开发人员帐户并生成您的API密钥。 您可以在此处直接申请开发者帐户 。 您必须回答有关如何计划使用API并接受Twitter开发人员协议的问题,然后将被授予对开发人员仪表板的访问权限。
一旦获得对Twitter开发人员的访问权限,请登录到开发人员站点并创建您的应用程序。 此步骤将自动生成您的使用者API密钥和访问令牌,请记住,您应该将它们保密:
开发者帐户应链接到您要激活机器人的Twitter帐户。 在Twitter开发平台上,您可以编辑应用程序权限。 在我的示例中,我已授予我的应用读取,编写和发送直接消息的权限。
为了开始获取加密货币的社会见解,您必须前往LunarCRUSH.com并设置一个帐户。
在左侧导航栏中,转到“开发人员”,然后选择“ API文档”。
生成V2 API密钥
进入API文档后,生成您的V2 API密钥。
让我们开始构建我们的Twitter机器人。 如前所述,您将使用Tweepy库 ,该库可与Twitter API和LunarCRUSH API / LunarSTREAM™无缝协作。
首先,导入tweepy 。 Tweepy使得通过我们的Twitter App秘密密钥向API进行身份验证更加容易。
下面是一段代码摘录,可通过创建一个OAuthHandler实例来绕过使用者密钥和使用者秘密作为参数来处理我们的登录 ,以完成此操作。
为了能够向API发出请求,请发送回访问令牌。 使用auth.set_access_token方法存储我们会话的访问请求令牌。
现在,您准备使用Python控制我们的Twitter帐户 。 请注意,我包括的是“ XXX”而不是我的真实密钥。 将“ XXX”替换为您可以在Twitter Developers Dashboard中获得的密钥。
import tweepy
import urllib.request
import ssl
import json
import time
ssl._create_default_https_context = ssl._create_unverified_context
# Oauth keys
consumer_key = "XXX"
consumer_secret = "XXX"
access_token = "XXX"
access_token_secret = "XXX"
# Authentication with Twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
我们的变量api是您存储身份验证设置的位置。 您将使用它向Twitter API发出请求。
这个Twitter机器人的想法是发布每条X分钟的不同推文,其中包含特定的加密货币硬币/令牌指标。 使用LunarCRUSH API和LUNARSTREAM™可以轻松完成此操作。
让我们将LunarCRUSH API密钥添加到代码中。 只需添加:
api_key = "XXX"
现在,您已通过LunarCRUSH API进行身份验证。 现在是时候确定要将哪些加密货币集成到推文中了。 使用coin_list来存储不同的加密符号。 例如,“ LTC”是莱特币,“ ETH”是以太坊,“ BTC”是比特币。
# Allows adding as many coins as desired
coin_list = [
"LTC" ,
"ETH" ,
"BTC"
]
coins = ',' .join(coin_list)
API所需字段的列表-键是LunarCRUSH键,值是输出到Twitter的字段名称。
{ "LUNAR_CRUSH_KEY" : "RENDERED_NAME" }
例如,添加tweet_replies:
{ "tweet_replies" : "Tweet Replies: " },
您可以将其添加到下面的列表中。
列表理解为创建列表提供了一种简洁的方法。 常见的应用是创建新列表,其中每个元素是应用于另一个序列的每个成员或可迭代的某些操作的结果,或者创建满足特定条件的那些元素的子序列。 — Python数据结构文档
现在,您可以映射要从LunarCRUSH API中提取的值。 随着程序变得越来越复杂,应该以更强大的方式编写它。
map = [
{ "name" : "" },
{ "symbol" : "" },
{ "price" : " Price: " },
{ "percent_change_24h" : " - 24 Hour Percent Change: " },
{ "market_cap" : " Market Cap: " },
{ "volume_24h" : " 24 Hour Volume: " },
{ "url_shares" : " URL Shares: " },
{ "reddit_posts" : " Reddit Posts: " },
{ "tweets" : " Tweets: " },
{ "galaxy_score" : " Galaxy Score: " },
{ "volatility" : " Volatility: " },
{ "social_volume" : " Social Volume: " },
{ "news" : " News: " },
{ "close" : " Close: " },
]
def final_render (asset_tweet, value, key, asset) :
if key == 'symbol' :
asset_tweet += " (" + asset[key] + ")"
elif key == 'percent_change_24h' :
asset_tweet += value + str(asset[key]) + "%"
else :
asset_tweet += value + str(asset[key])
return asset_tweet
现在,遍历LunarCRUSH的每个字段,该字段从LunarCRUSH获取值,并使用字段名称进行呈现。
def main () :
url = "https://api.lunarcrush.com/v2?data=assets&key=" + api_key + "&symbol=" + coins
assets = json.loads(urllib.request.urlopen(url).read())
for asset in assets[ 'data' ]:
asset_tweet = ""
for field in map:
key = list(field.keys())[ 0 ]
value = list(field.values())[ 0 ]
asset_tweet = final_render(asset_tweet, value, key, asset)
print(asset_tweet)
print(len(asset_tweet))
# Posts tweets
api.update_status(status=asset_tweet)
# Runs main() every 30 minutes
while True :
main()
time.sleep( 1800 )
完整代码Github存储库
import urllib.request
import ssl
import json
import time
import tweepy
ssl._create_default_https_context = ssl._create_unverified_context
# Oauth keys
consumer_key = "XXX"
consumer_secret = "XXX"
access_token = "XXX"
access_token_secret = "XXX"
# Authentication with Twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
#LunarCRUSH API Key
api_key = "XXX"
# Allows adding as many coins as desired
coin_list = [
"LTC" ,
"ETH" ,
"BTC"
]
coins = ',' .join(coin_list)
# A list of the fields desired from the API - key is the Lunar Crush key, and the value is the field name outputted to Twitter
# {"LUNAR_CRUSH_KEY": "RENDERED_NAME"}
# For example, to add tweet_replies, you would add:
# {"tweet_replies": "Tweet Replies: "},
# to the list below.
map = [
{ "name" : "" },
{ "symbol" : "" },
{ "price" : " Price: " },
{ "percent_change_24h" : " - 24 Hour Percent Change: " },
{ "market_cap" : " Market Cap: " },
{ "volume_24h" : " 24 Hour Volume: " },
{ "url_shares" : " URL Shares: " },
{ "reddit_posts" : " Reddit Posts: " },
{ "tweets" : " Tweets: " },
{ "galaxy_score" : " Galaxy Score: " },
{ "volatility" : " Volatility: " },
{ "social_volume" : " Social Volume: " },
{ "news" : " News: " },
{ "close" : " Close: " },
]
def final_render (asset_tweet, value, key, asset) :
# As the program becomes more complex, this should be written in a more robust manner
if key == 'symbol' :
asset_tweet += " (" + asset[key] + ")"
elif key == 'percent_change_24h' :
asset_tweet += value + str(asset[key]) + "%"
else :
asset_tweet += value + str(asset[key])
return asset_tweet
# Iterates over each of the fields from Lunar Crush, gets the value from Lunar Crush and renders it with the field name
def main () :
url = "https://api.lunarcrush.com/v2?data=assets&key=" + api_key + "&symbol=" + coins
assets = json.loads(urllib.request.urlopen(url).read())
for asset in assets[ 'data' ]:
asset_tweet = ""
for field in map:
key = list(field.keys())[ 0 ]
value = list(field.values())[ 0 ]
asset_tweet = final_render(asset_tweet, value, key, asset)
print(asset_tweet)
print(len(asset_tweet))
# Posts tweets
api.update_status(status=asset_tweet)
# Runs main() every 30 minutes
while True :
main()
time.sleep( 1800 )
LunarCRUSH + Python Twitter Bot中包含的其他功能
您不仅可以发布推文,还可以发布推文。 我们的LunarCRUSH Python Tweepy Twitter Bot可以执行其他功能。
例如:
拉取有关特定Twitter用户的信息- 用户方法
发送直接消息— 直接消息方法
关注和取消关注用户- 友谊方法
阻止和取消阻止用户- 阻止方法
可以将机器人配置为提取其他功能。 例如:
?key={API_KEY_HERE} - Required to render the widgets.
?symbol=BTC - Change the symbol that is displayed in the widgets.
? interval = 1 Week - Change the time interval being displayed in the charts ( default is 1 Week).
?price_correlation= true | false - Show a price line in addition to the selected metric (default = false )
?metric=galaxy_score - Change the timeseries metric being displayed (Metric widget only ).
?animation= true | false - Show or hide component animations (default = true )
?theme={See themes section for instructions}
?scrolling= true | false (default = true ) - Enable or disable scrolling on the widget inner content. Use this if you want to set scrolling= false on the iframe with a fixed height but still want to allow scrolling within the widget.
您可以配置和添加LunarCRUSH的所有可用指标:
market_cap ( Market Cap)
galaxy_score ( Galaxy Score)
price_score ( Price Score)
average_sentiment ( Average Sentiment)
social_impact_score ( Social Impact Score)
market_cap ( Market Cap)
galaxy_score ( Galaxy Score)
price_score ( Price Score)
average_sentiment ( Average Sentiment)
social_impact_score ( Social Impact Score)
correlation_rank ( Correlation Rank)
volatility ( Volatility )
social_score ( Social Volume)
social_volume ( Social Volume)
twitter_volume ( Twitter Volume)
reddit_volume ( Reddit Volume)
news_volume ( News Volume)
search_volume ( Search Volume)
spam_volume ( Spam Volume)
bullish_sentiment ( Bullish Sentiment)
bearish_sentiment ( Bearish Sentiment)
Metrics Widgets
average_sentiment ( Average Sentiment)
correlation_rank ( Correlation Rank)
galaxy_score ( Galaxy Score)
market_cap ( Market Cap)
market_cap_rank ( Market Cap Rank)
news_articles ( News Volume)
popular_tweet ( Popular Tweets)
price_btc ( Price BTC)
price_score ( Price Score)
priceclose ( Price Close)
pricehigh ( Price High)
pricelow ( Price Low)
priceopen ( Price Open)
reddit_comment ( Reddit Comments)
reddit_post ( Reddit Posts)
reddit_post_reddit_comment ( Reddit Volume)
search_average ( Search Volume)
social_impact_score ( Social Impact Score)
social_score ( Social Volume)
tweet ( Twitter Volume)
tweet_sentiment1 ( Very Bearish Sentiment)
tweet_sentiment2 ( Bearish Sentiment)
tweet_sentiment2_tweet_sentiment ( Negative Sentiment)
tweet_sentiment3 ( Neutral Sentiment)
tweet_sentiment4 ( Bullish Sentiment)
tweet_sentiment5 ( Very Bullish Sentiment)
tweet_sentiment4_sentiment5 ( Positive Sentiment)
tweet_sentiment_impact1 ( Very Bearish Sentiment Impact)
tweet_sentiment_impact2 ( Bearish Sentiment Impact)
tweet_sentiment_impact3 ( Neutral Sentiment Impact)
tweet_sentiment_impact4 ( Bullish Sentiment Impact)
tweet_sentiment_impact5 ( Very Bullish Sentiment Impact)
tweet_spam ( Spam Volume)
volatility ( Volatility )
volumefrom ( Market Volume Open)
volumeto ( Market Volume Close)
现在,只需几行代码,即可轻松配置的Twitter机器人从LunarCRUSH中提取数据,并通过实时可靠的社交见解自动吸引您的受众。
可以做一些事情来改进代码,例如附加的LunarCRUSH参数来推销健壮的加密货币数据或带有图像和标签的视觉上吸引人的推文。
如果您有任何疑问或建议,请在评论中让我知道。
From: https://hackernoon.com/building-a-twitter-bot-to-automate-posting-cryptocurrency-news-with-python-a-step-by-step-guide-iv77327t