如何在twitter上搜索关键字

如何在twitter上搜索关键字,twitter,Twitter,我正在尝试建立一个服务,在持续监控的基础上为Twitter上的多个用户执行关键字搜索。似乎有5种不同的方法来实现这一点——都有各自的缺点。我浏览了Twitter和twitter4j文档,找不到任何其他方法 使用TwitterRESTAPI执行搜索(https://dev.twitter.com/docs/api/1/get/search). 此API的结果有限:要求太多,您将受到限制。我必须记录最后一次读到的推文,这样我就不会重复结果。需要一个计时器来轮询流。如果有多个搜索词,则拨打多个电话很简

我正在尝试建立一个服务,在持续监控的基础上为Twitter上的多个用户执行关键字搜索。似乎有5种不同的方法来实现这一点——都有各自的缺点。我浏览了Twitter和twitter4j文档,找不到任何其他方法

  • 使用TwitterRESTAPI执行搜索(https://dev.twitter.com/docs/api/1/get/search). 此API的结果有限:要求太多,您将受到限制。我必须记录最后一次读到的推文,这样我就不会重复结果。需要一个计时器来轮询流。如果有多个搜索词,则拨打多个电话很简单

  • 搜索公共流方法(https://dev.twitter.com/docs/streaming-apis/streams/public). 虽然这对于持续搜索来说很好,但Twitter只允许每个帐户有一个连接,并且对可以传递到Twitter的术语数量有限制。对于我的用例来说绝对不可能

  • 尝试使用用户流进行筛选。我这样做了,但发现很难快速确定推特是来自搜索还是来自用户流。此外,Twitter表示,他们将限制每个IP地址的用户流数量,因此这种方法不会扩展。(Twitter一直在谈论一种叫做SiteStreams的东西,但它是一个非常有限的测试版,没有任何文档,所以我不能考虑)

  • 转到从Twitter(例如Datasift)购买整个消防软管的第三方,并在那里搜索Twitter流。这会很昂贵——基本计划每月3千美元。全天候搜索一个单词的费用约为45美元/月)

  • 我向社会提出的问题是“我是否用尽了所有的可能性”?如果是的话,那么在我看来#1——使用带计时器的REST API并跟踪最后找到的是正确的方法。有人不同意吗?如果是这样的话,你能给我指一下有助于我解决这个问题的文档(或库)吗


    谢谢大家

    您希望搜索twitter的频率是多少,可能的搜索量是多少(即有多少用户,每个用户有多少关键字)


    您是否也考虑过内置刮削工具?也就是说,让浏览器在服务器上运行,并保持搜索结果的最新状态,并为浏览器开发一个简单的插件,捕获数据并将其发布到您的数据库/发送到某个地方进行处理?

    Twitter的回应是使用#4——从供应商处购买访问权限,如Datasift。

    我制作了一个漂亮的JS提琴,在处理Twitter API时,它应该能回答您的所有问题。webapp可以获取趋势区域设置,并允许您深入到趋势主题,然后查看其中的tweet

    我还包括了一个标准的Twitter搜索提交框,所以奇怪的是,这是一个赤裸裸的Tweetdeck客户端供您检查。另外,为了推动新Jquery库的自适应,我使用了1.91,它使用了新的live.bind click事件语法

    享受

    函数搜索Twitter(查询){
    $.ajax({
    网址:'http://search.twitter.com/search.json?'+jQuery.param(查询),
    数据类型:“jsonp”,
    成功:功能(数据){
    var tweets=$(“#tweets”);
    html(“”);
    对于(数据中的res['results']){
    追加(“”+data['results'][res]['from_user']+'写:'+data['results'][res]['text']+'


    '); } } }); } $(文档).ready(函数(){ 函数getTrendsByID(id){ $.ajax({ 网址:'http://api.twitter.com/1/trends/“+id+”.json”, 数据类型:“jsonp”, 成功:功能(数据){ $.each(数据[0]。趋势,函数(i){ }); } }); }; 函数getLocales(){ $.ajax({ 网址:'https://api.twitter.com/1/trends/available.json', 数据类型:“jsonp”, 成功:功能(数据){ var locales=$('ul#locales'); html(“”); $。每个(数据、功能(i){ localeID[i]=data[i].woeid; $('ul#locales').append('
  • '+data[i].name+'
  • '); }); } }); }; 函数getTrends(id){ $.ajax({ 网址:'https://api.twitter.com/1/trends/“+id+”.json”, 数据类型:“jsonp”, 成功:功能(数据){ var趋势=$('ul#currentTrends'); html(“”); $.each(数据[0]。趋势,函数(i){ $('ul#currentTrends')。追加('
  • '+数据[0]。趋势[i]。名称+'
  • '); }); } }); }; //事件处理程序 $(文档)。在“单击”上,在“区域设置”上,函数(){ var$this=$(this); var localesHdr=$(“#CurrentTrendsCount h3”); var tweets=$(“#tweets”); var trendsHdr=$(“#tweetsCont h3”); trendsHdr.html(“”); html(“”); localesHdr.html(“”); $('#CurrentTrendsCount h3').html($this.text()); getTrends(localeID[$this.index()]); }); $(文档)。在(“单击”,“当前趋势”,函数(){ var$this=$(this); var trendsHdr=$(“#tweetsCont h3”); trendsHdr.html(“”); $('#tweetsCont h3').html($this.text()); 变量参数={ q:$this.text(), rpp:10 }; 搜索推特(params); }); $(“#提交”)。单击(函数(){ var trendsHdr=$(“#tweetsCont h3”); var趋势=$(“#当前趋势”); var local=$(“#CurrentTrendsCount h3”); local.html(“”); trendsHdr.html(“”); html(“”); $('#tweetsCont h3').html('搜索查询:'+$('#查询').val()); 变量参数={ q:$('#query').val(), rpp:10 }; 搜索推特(params); }); //全球的 var localeID=新数组(); //初始化! getLocales(); });
    对不起。添加了grails标记,认为我会把twitter4j和grails代码放在问题中。但没有必要,我希望尽可能地接近实时搜索Twitter。这是用户流的吸引力之一
    function searchTwitter(query) {
    $.ajax({
        url: 'http://search.twitter.com/search.json?' + jQuery.param(query),
        dataType: 'jsonp',
        success: function (data) {
            var tweets = $('#tweets');
            tweets.html('');
            for (res in data['results']) {
                tweets.append('<div>' + data['results'][res]['from_user'] + ' wrote: <p>' + data['results'][res]['text'] + '</p></div><br />');
            }
        }
    });
    }
    
    $(document).ready(function () {
    
    function getTrendsByID(id) {
        $.ajax({
            url: 'http://api.twitter.com/1/trends/' + id + '.json',
            dataType: 'jsonp',
            success: function (data) {
                $.each(data[0].trends, function (i) {
                });
            }
        });
    };
    
    function getLocales() {
        $.ajax({
            url: 'https://api.twitter.com/1/trends/available.json',
            dataType: 'jsonp',
            success: function (data) {
                var locales = $('ul#locales');
                locales.html('');
                $.each(data, function (i) {
                    localeID[i] = data[i].woeid;
                    $('ul#locales').append('<li>' + data[i].name + '</li>');
                });
            }
        });
    
    };
    
    function getTrends(id) {
        $.ajax({
            url: 'https://api.twitter.com/1/trends/' + id + '.json',
            dataType: 'jsonp',
            success: function (data) {
                var trends = $('ul#currentTrends');
                trends.html('');
                $.each(data[0].trends, function (i) {
                    $('ul#currentTrends').append('<li>' + data[0].trends[i].name + '</li>');
                });
            }
        });
    };
    
    // Event Handlers
    $(document).on("click", "#locales li", function () {
        var $this = $(this);
        var localesHdr = $('#currentTrendsCont h3');
        var tweets = $('#tweets');
        var trendsHdr = $('#tweetsCont h3');
        trendsHdr.html('');
        tweets.html('');
        localesHdr.html('');
        $('#currentTrendsCont h3').html($this.text());
        getTrends(localeID[$this.index()]);
    });
    
    $(document).on("click", "#currentTrends li", function () {
        var $this = $(this);
        var trendsHdr = $('#tweetsCont h3');
        trendsHdr.html('');
        $('#tweetsCont h3').html($this.text());
        var params = {
            q: $this.text(),
            rpp: 10
        };
        searchTwitter(params);
    });
    
    $('#submit').click(function () {
        var trendsHdr = $('#tweetsCont h3');
        var trends = $('#currentTrends');
        var local = $('#currentTrendsCont h3');
        local.html('');
        trendsHdr.html('');
        trends.html('');
        $('#tweetsCont h3').html('search query: '+$('#query').val());
        var params = {
            q: $('#query').val(),
            rpp: 10
        };
        searchTwitter(params);
    });
    
    // Globals
    var localeID = new Array();
    
    // Init!
    getLocales();
    
    });