首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在PHP中使用Twitter搜索时出错

在PHP中使用Twitter搜索时出错
EN

Stack Overflow用户
提问于 2012-04-22 19:09:20
回答 2查看 345关注 0票数 0

在推特上搜索了2到3次之后,我得到了一个错误:你一直在用limited.enhance评价你的冷静

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 function twitter_class()
{
    $this->realNamePattern = '/\((.*?)\)/';


$this->intervalNames   = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year');
$this->intervalSeconds = array( 1,        60,       3600,   86400, 604800, 2630880, 31570560);

    $this->badWords = array('somebadword', 'anotherbadword');
}
function searchURL($language, $query) {
    $func_args=func_get_args();
    $vars = array_map('urlencode', $func_args + array('', ''));        
    return vsprintf('http://search.twitter.com/search.atom?lang=%s&q=%s', $vars);
}

function getTweets($q,$lang, $limit=15)
{
    $output = '';

    // get the seach result

   $ch = curl_init($this->searchURL($lang, $q));


    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

    $response = curl_exec($ch);

    if ($response !== FALSE)
    {
        $xml = simplexml_load_string($response);

        $output = '';
        $tweets = 0;

        for($i=0; $i<count($xml->entry); $i++)
        {
            $crtEntry = $xml->entry[$i];
            $account  = $crtEntry->author->uri;
            $image    = $crtEntry->link[1]->attributes()->href;
            $tweet    = $crtEntry->content;

            // skip tweets containing banned words
            $foundBadWord = false;
            foreach ($this->badWords as $badWord)
            {
                if(stristr($tweet, $badWord) !== FALSE)
                {
                    $foundBadWord = true;
                    break;
                }
            }

            $tweet = str_replace('<a href=', '<a target="_blank" href=', $tweet);

            // skip this tweet containing a banned word
            if ($foundBadWord)
                continue;

            // don't process any more tweets if at the limit
            if ($tweets==$limit)
                break;
            $tweets++;

            // name is in this format "acountname (Real Name)"
            preg_match($this->realNamePattern, $crtEntry->author->name, $matches);
            $name = $matches[1];

            // get the time passed between now and the time of tweet, don't allow for negative
            // (future) values that may have occured if server time is wrong
            $time = 'just now';
            $secondsPassed = time() - strtotime($crtEntry->published);

            if ($secondsPassed>0)
            {
                // see what interval are we in
                for($j = count($this->intervalSeconds)-1; ($j >= 0); $j--)
                {
                    $crtIntervalName = $this->intervalNames[$j];
                    $crtInterval = $this->intervalSeconds[$j];

                    if ($secondsPassed >= $crtInterval)
                    {
                        $value = floor($secondsPassed / $crtInterval);
                        if ($value > 1)
                            $crtIntervalName .= 's';

                        $time = $value . ' ' . $crtIntervalName . ' ago';

                        break;
                    }
                }
            }

这是我的代码,请看一看,找出准确的解决方案

EN

回答 2

Stack Overflow用户

发布于 2012-04-22 19:28:45

使用Twitter API是有限制的。如果您在共享服务器上测试该代码(即如果您的ip正在被使用twitter API的其他人使用),可能会导致此问题。或者你提出了太多的要求...

https://dev.twitter.com/docs/rate-limiting#search

搜索应用编程接口速率限制

对托管在search.twitter.com上的搜索API的请求不会计入REST API限制。但是,来自IP地址的所有请求都应用于搜索速率限制。搜索速率限制并未公开,以阻止不必要的搜索使用和滥用,但它高于REST速率限制。我们认为搜索率限制对于大多数应用程序来说都是宽松和足够的,并知道许多应用程序供应商已经发现它适合他们的需求。

对搜索API的要求

搜索API的使用要求应用程序包含唯一且可识别的用户代理字符串。需要HTTP Referrer,但不是必需的。使用搜索API但未包含用户代理字符串的应用程序将收到较低的速率限制。

超出搜索API速率限制的应用程序将收到HTTP 420响应码。最佳实践是观察此错误情况,并遵循返回的Retry After标头。Retry After标头的值是应用程序在再次从搜索API请求数据之前应等待的秒数。

改用流式API

搜索API最适合用户发起的即席查询。如果您的应用程序需要重复搜索API轮询,则可能需要考虑使用流式API。

避免受到价格限制的小贴士

下面的提示是为了帮助你进行防御性的编码,并减少被速率限制的可能性。

根据速率限制,您可能想要提供的一些应用程序功能是不可能的,尤其是在结果的新鲜度方面。如果应用程序的目标是实时信息,请查看用户流或站点流。

缓存

如果您期望大量使用,请将API响应存储在您的应用程序中或您的站点上。例如,不要试图在网站登录页面的每个页面加载时都调用Twitter API。相反,可以不频繁地调用API并将响应加载到本地缓存中。当用户访问你的网站时,加载缓存版本的结果。

对活跃用户进行优先级排序

如果您的站点跟踪许多Twitter用户(例如,获取他们的当前状态或有关其Twitter使用情况的统计信息),请考虑仅请求最近登录到您的站点的用户的数据。

适应搜索结果

如果您的应用程序监控大量搜索项,则对没有结果的搜索的查询频率要比对有结果的搜索的查询频率低。通过使用退避,您可以保持对流行的查询的更新,而不是浪费请求很少更改的查询的周期。

或者,考虑使用流应用编程接口并对您的搜索项进行过滤。

票数 1
EN

Stack Overflow用户

发布于 2012-04-23 09:34:14

如果你想绕过twitter的限制,那么你要么得到许多不同IP的机器,并在它们之间分配搜索请求,以便在不同的时间调用它们,要么将查询移动到客户端(假设您有很多客户端在寻找),并希望它们提高您的带宽,尽管它不会那么安全。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10271154

复制
相关文章
textarea 的 placeholder="" 不起作用
textarea 的 placeholder="请输入解决方案(极简化、不超过500字)" 不起作用
一个会写诗的程序员
2018/08/17
2K0
MySQL kill会话不起作用?
在一次日常测试中发现,kill 一个会话后,SQL语句依然在运行并没终止;被kill的会话重新连接并继续执行原来的SQL语句。
老叶茶馆
2023/09/01
2490
MySQL kill会话不起作用?
为什么我的样式不起作用?
大概看一下代码,是有一个Parent的父组件,蓝底白字。还有一个Child的子组件,红底黑字。 那么实际渲染出的样式是什么样子的呢。如下图:
w候人兮猗
2020/07/01
4.2K0
MySQL kill会话不起作用?
在一次日常测试中发现,kill 一个会话后,SQL语句依然在运行并没终止;被kill的会话重新连接并继续执行原来的SQL语句。
GreatSQL社区
2023/08/10
3910
MySQL kill会话不起作用?
RecyclerView.Adapter notifyDataSetChanged 不起作用
如果应用启动,不在聊天界面,接收到消息后就弹出通知栏消息通知用户,点击进入聊天界面。
张拭心 shixinzhang
2022/05/06
3K0
关于.gitignore不起作用「建议收藏」
由于公司和家里的as版本不同,倒腾了好久,但是代码到本地后build.gradle等文件做了修改,为了不影响公司版本,故家里的需要忽略这些文件的修改,想到的就是加gitignore配置,直接添加不起效果,找到如下办法:
全栈程序员站长
2022/11/01
2K0
Nginx配置缺失导致CSS不起作用
启动nginx,打开网页,发现样式并没有如期加载,看chrome的console,显示如下:
血狼debugeeker
2021/03/02
3.8K0
解决CSS属性position:fixed不起作用
若父元素设置了transform属性,无论transform设置任何属性值,都会导致position:fixed属性失效!
赵彤刚
2022/12/13
3.3K0
解决CSS属性position:fixed不起作用
FeignClient 设置 fallback不起作用
StringCloud FeignClient 设置 fallback不起作用 今天在配置feign中是用hystrix的时候,FeignClient 中的 fallback不起任何作用,本来以为是 不支持这个属性了,打开源码一看,还提供这个fallback属性,后来翻阅各中资料,才发现是没有打开feign对hustrix的支持。下面是解决方案: 在application.yml中加入如下配置就可以了 feign: hystrix: enabled: true
码农笔录
2018/06/29
3.5K0
setOnItemClickListener不起作用解决方法
setOnItemClickListener不起作用解决方法 问题 原因 源码解析 解决方法 问题 使用ListView时通常会和Adapter一起使用,在使用setOnItemClickListener方法监听节点时不起作用 原因 原因是因为在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件,此时这些子控件会获取到焦点,所以常常当点击item时变化的是子控件,item本身的点击没有响应,此时就该用到descendantFocusability属性了,下面让我
是阿超
2022/05/05
2K0
setOnItemClickListener不起作用解决方法
听说你们家的NotifyDataSetChanged不起作用了
前几天,公司项目准备上线,就在前一晚,出现了一个BUG:主页界面刷新无效。千钧一发之际,用了一个笨方法,每次刷新的时候重新setAdapter一下算是实现了基本功能,但是这样显然效率不高,数据很多的时候容易卡顿。当时时间紧也就没有对问题作过多的了解,现在回过头来对NotifyDataSetChanged无效的问题进行分析。
代码咖啡
2018/08/28
1.9K0
听说你们家的NotifyDataSetChanged不起作用了
Vue 中使用 JQuery 插件不起作用
有时候在 vue 的代码中使用 jQuery 会不起作用,这是因为 vue 还没有绑定变量,所以我们使用的 jQuery 根本就找不到目标变量,就不会执行,正确的做法是先设置一个时延,稍微等一等 vue 的加载。
wsuo
2020/10/26
2.3K0
hibernate3事务不起作用
如果没有如果,也许永远都发现不了这个问题,除非数据出现问题没有回滚。 由于一同事测试事务问题,发现数据不对,事务没有回滚。项目采用shiro+struts2+spring+hibernate,事务配置采用声明式事务。 用于在struts2的action层 aop注解权限,所用使用了cglib动态代理,如下: <aop:aspectj-autoproxy proxy-target-class="true"/> cglib的动态代理是基于任意类的,而JDK的动态代理是必须要实现接口的。而我们系统中service
小柒2012
2018/04/13
1.5K0
你的神经网络不起作用的37个理由
有一个网络已经训练了12个小时。一切看起来都很好:梯度是逐渐变化的,损失在减少。但接下来的预测:都是零,所有的图像背景都没有被检测到。“我做错了什么?”——我问我的电脑,但它没有回答我。
AI科技大本营
2019/10/10
7760
WordPress中的jQuery库不起作用的相关问题
WordPress 中的jQuery 库问题曾经困扰了我一段时间。如果仅仅加载WordPress 自带的jQuery 库,在使用一些jQuery 插件的时候明明是代码没有错误,但就是不起作用,该有的效果不能实现;但加载了原版的jQuery 库却又可以了,这样一来却同时加载了两个jQuery 库,网页速度拖慢了而且根本没有必要。 后来才了解到:为了防止与其他 JS 库(如 YUI)冲突,WordPress 内置 jQuery 库的末尾都在原版的基础上加入了 jQuery.noConflict()这个东东,以至
Jeff
2018/01/19
4K0
html的base标签为什么不起作用
我今天尝试编译一个Angular4的应用,并部署到服务器的一个路径上去,由于不是根路径因此我使用了下面的语句: ng build -prod -bh /rel 自然的Angular应用index.html里的语句就变成了: <base href="/rel"> 但,当我用http://localhost:8080/rel打开网页时却提示Loading...,打开调试发现js路径没找到,base标签没有生效,上网自学一番收获如下: https://stackoverflow.com/questions/115
孙亖
2018/06/07
1.9K0
WebSocket的JavaScript例子
在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API。WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看HTML5的WebSocket API:它可用于客户端、服务器端。而且有一个优秀的第三方API,名为Socket.IO。
周陆军博客
2023/05/07
4790
wx.previewImage Iframe不起作用
//imgArray为图片列表,corecturl为当前图片路径 parent.WeixinJSBridge.invoke("imagePreview", { "urls": imgArray, "current": corecturl }) // wx.previewImage({ // current: corecturl, // urls: imgArray // }); 只需要将原来的wx.previewImage替换为parent.WeixinJSBridge.i
2021/11/08
1.7K0
@Transactional不起作用解决方案
@Transactional不起作用 解决方案: 把@Transactional 放在Service层就可以了 放在Controller层里不起作用。。。
周杰伦本人
2023/10/12
1960
点击加载更多

相似问题

关于苹果的KMLViewer placemarkDescription和注释副标题

13

苹果解释的快速例子

12

KMLViewer问题

12

不理解苹果的takeFloatValueFrom:例子

14

如何建立苹果的儿子抓斗的例子?

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文