通过Twitter Feed搜索Alexa技能

问题描述 投票:0回答:1

我正在研究一种相当基本的Alexa技能,实质上,它通过特定的Twitter搜索来搜索主题标签,解析该推文并将其读回。从Twitter提要中提取数据的最简单方法是什么?我一直在使用Twitter API(见下文)和scraping data from Twitter appears to be against the TOS.时遇到问题

...如果按照robots.txt文件的规定进行,则允许抓取服务,但是,未经Twitter事先同意,明确禁止抓取服务。

写一个Alexa技能

  1. Follow a tutorial. 很简单。使用漂亮的接口添加一个调用,一些意图和一个插槽类型与我想要的数据。
  2. 写一个AWS Lambda函数来处理一切。 Python因为我比JavaScript更了解它。选择one of the Python wrappers for the Twitter API,然后意识到因为Twitter,他们所有的API都需要身份验证 - 甚至是基本搜索。
  3. Register an app with Twitter所以我有钥匙和钥匙。
  4. 在应用程序中实现明文中的身份验证密钥和令牌是一个坏主意,并决定为Alexa计算帐户链接。
  5. Try following the one tutorial aroundtwice。有麻烦,去StackExchange。 为什么需要外部webapp? ...我们需要自己的OAuth实现才能使集成正常运行 What's wrong with the one provided by Twitter?为什么不能在Lambda方法中修复任何问题,因为帐户集成没有被触及,否则AFAIK?是不是通过URL传递令牌也是一个坏主意?他们的示例代码似乎要求消费者密钥也是硬编码的。 输入:“https://alexa-twitter-airport-info.herokuapp.com/oauth/request_token?vendor_id=XXXXXX&consumer_key=YYYYYY&consumer_secret=ZZZZZZ”。 至少,他们的webapp似乎暂时停止了,而且有一个不需要付钱来托管另一个副本的选项会很好。

I've seen this post讨论了Node.js OAuth实现,但是这种实现的必要性仍然让我感到厌烦。

twitter oauth alexa-skills-kit alexa-skill alexa-voice-service
1个回答
0
投票

我发现twitter Node包很有用。为了我的目的,我使用了搜索/推文GET API,如下所示。但是,您可以使用各种AP​​I来处理推文。下面的代码仅显示从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.
               });
           }
    });
© www.soinside.com 2019 - 2024. All rights reserved.