我正在研究一种相当基本的Alexa技能,实质上,它通过特定的Twitter搜索来搜索主题标签,解析推文并将其读回。 从Twitter Feed中提取数据的最简单方法是什么?我一直在使用Twitter API(见下文)和scraping data from Twitter appears to be against the TOS.
时遇到问题...如果按照robots.txt文件的规定进行,则允许抓取服务,但是,未经Twitter事先同意,明确禁止抓取服务。
撰写Alexa技能
足够简单。使用漂亮的接口添加调用,一些意图和带有我想要的数据的插槽类型。
编写AWS Lambda函数来处理所有内容。
Python因为我比JavaScript更了解它。选择one of the Python wrappers for the Twitter API,然后意识到因为Twitter,他们所有的API都需要身份验证 - 甚至是基本搜索。
Register an app with Twitter所以我有钥匙和钥匙。
在应用程序中实现明文中的身份验证密钥和令牌是一个坏主意,并决定为Alexa确定帐户链接。
Try following the one tutorial around,twice。 遇到问题并转到StackExchange。
为什么需要外部网络应用程序?
...我们需要自己的OAuth实现才能使集成正常工作
What's wrong with the one provided by Twitter?为什么在Lambda方法中无法解决任何问题,因为除非AFAIK触及帐户集成?是不是通过URL传递令牌也是一个坏主意?他们的示例代码似乎也要求消费者密钥也是硬编码的。
至少,他们的网络应用程序暂时似乎已经停止了,而且选择一个不需要付钱来托管另一个副本的选项很不错。
< / LI> 醇>I've seen this post讨论了Node.js OAuth实现,但这种实现的必要性仍然让我感到厌烦。
答案 0 :(得分:0)
我发现twitter Node包很有用。为了我的目的,我使用了搜索/推文GET API,如下所示。但是,您可以使用各种API来处理推文。下面的代码仅显示从Node JS中访问Twitter API所需的部分。
var Twitter = require('twitter');
var client = new Twitter({
// I added the keys as AWS Environment variables
consumer_key: process.env.consumer_key,
consumer_secret: process.env.consumer_secret,
access_token_key: process.env.access_token_key,
access_token_secret: process.env.access_token_secret
});
client.get('search/tweets', {q: <<your search query>>,count:<<if you want to receive specific number of tweets>>}, function(error, tweets, response) {
var noOfTweets = tweets.statuses.length;
if(error) {
speechOutput = "I could not find tweets for <<your reason>>"
self.emit(':tell', speechOutput);
} else if(noOfTweets === 0) {
speechOutput = "another speech output";
self.emit(':tell', speechOutput);
} else {
tweets.statuses.forEach(function(tweet) {
//process the tweet the way you want to.
});
}
});