如何在Twitter上搜索关键字

时间:2012-11-15 22:33:25

标签: twitter

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

  1. 使用Twitter REST API执行搜索(https://dev.twitter.com/docs/api/1/get/search)。这个API是结果有限的:要求太多,你将受到限制。我必须跟踪最后一条推文,所以我不会重复结果。轮询流需要一个计时器。如果有多个搜索字词,则可以轻松进行多次调用。

  2. 搜索公共流方法(https://dev.twitter.com/docs/streaming-apis/streams/public)。虽然这对于不断搜索很有用,但Twitter每个帐户只允许一个连接,并且有多少条款可以传递到Twitter。我的用例绝对不可能

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

  4. 转到从Twitter购买整个firehose的第三方(例如Datasift)并在那里搜索推特流。这变得很昂贵 - 基本计划每月3美元。每周7天,每天24小时搜索一个单词〜45美元/月)

  5. 我对社区的质疑是“我已经穷尽所有可能性”吗?如果是,那么在我看来#1 - 使用带有计时器的REST API并跟踪最后找到的是正确的方法。有人不同意吗?如果是这样,您能否指出我可以帮助我解决此问题的文档(或库)。

    全部谢谢

3 个答案:

答案 0 :(得分:4)

我把一个很好的JS小提琴放在一起,在处理Twitter API时应该回答你所有的问题。 webapp抓取趋势区域设置,并允许您深入查看趋势主题,然后查看其中的推文。

我还包括一个标准的Twitter搜索提交框,所以以一种奇怪的方式,这是一个准系统的Tweetdeck客户端供您检查。另外,为了推动新Jquery库的改编,我使用了1.91来实现新的live.bind点击事件语法。

享受

http://jsfiddle.net/jdrefahl/5M3Gn/

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();

});

答案 1 :(得分:0)

您想多久搜索一下Twitter,可能的搜索量是多少(即有多少用户,每个用户有多少关键字)?

您是否也考虑过使用inbrowser-scraping工具?即让浏览器在与搜索结果保持同步的服务器上运行,并为该浏览器开发一个简单的插件,捕获数据并将其发布到您的数据库/将其发送到需要处理的地方?

答案 2 :(得分:0)

来自Twitter的回应是使用#4 - 来自Datasift等供应商的购买访问。