PHP Twitter API 搜索/推文 仅获取上一小时的推文

2024-01-13

您好,我一直在互联网上查找,但尚未找到解决方案。我只想获取过去一小时内具有特定主题标签的推文。

我正在使用该主题标签提取推文,但我不知道如何只获取过去一小时的推文。

这是一些示例数据:

正如您所看到的,那里有一个created_at日期,但我不知道如何使用它来获取过去一小时的日期。我认为这是我能够做到这一点的唯一方法。

我能想到的最好方法是将日期转换为 UNIX 时间戳,然后检查它是否是过去一小时内的推文。但是有很多数据需要检查,这似乎不是一个很好的解决方案,但这是我想不到的。

如果这是唯一的解决方案,有人会给我一个关于如何在 PHP 中将该日期转换为 UNIX 时间戳的示例吗?如果您有不同的解决方案,我希望看到详细的示例:) 谢谢

您可能还会发现此链接很有用https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets


我也找不到替代解决方案,所以我对其进行了编码。这WINDOW常数将时间间隔定义为 1 小时。希望能帮助到你!

<?php
//Access token & access token secret
define("TOKEN", 'XXXXXXXXXXXXXXXX'); //Access token
define("TOKEN_SECRET", 'XXXXXXXXXXXXXXXX'); //Access token secret
//Consumer API keys
define("CONSUMER_KEY", 'XXXXXXXXXXXXXXXX'); //API key
define("CONSUMER_SECRET", 'XXXXXXXXXXXXXXXX'); //API secret key

$method='GET';
$host='api.twitter.com';
$path='/1.1/search/tweets.json'; //API call path
$url="https://$host$path";
//Query parameters
$query = array(
    'q' => 'wordtosearch',          /* Word to search */
    'count' => '100',               /* Specifies a maximum number of tweets you want to get back, up to 100. As you have 100 API calls per hour only, you want to max it */
    'result_type' => 'recent',      /* Return only the most recent results in the response */
    'include_entities' => 'false'   /* Saving unnecessary data */
);
//time window in hours
define("WINDOW", 1); 

//Authentication
$oauth = array(
    'oauth_consumer_key' => CONSUMER_KEY,
    'oauth_token' => TOKEN,
    'oauth_nonce' => (string)mt_rand(), //A stronger nonce is recommended
    'oauth_timestamp' => time(),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_version' => '1.0'
);
//Used in Twitter's demo
function add_quotes($str) { return '"'.$str.'"'; }

//Searchs Twitter for a word and get a couple of results
function twitter_search($query, $oauth, $url){  
    global $method; 

    $arr=array_merge($oauth, $query); //Combine the values THEN sort
    asort($arr); //Secondary sort (value)
    ksort($arr); //Primary sort (key)
    $querystring=http_build_query($arr,'','&');
    //Mash everything together for the text to hash
    $base_string=$method."&".rawurlencode($url)."&".rawurlencode($querystring);
    //Same with the key
    $key=rawurlencode(CONSUMER_SECRET)."&".rawurlencode(TOKEN_SECRET);
    //Generate the hash
    $signature=rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));
    //This time we're using a normal GET query, and we're only encoding the query params (without the oauth params)
    $url=str_replace("&amp;","&",$url."?".http_build_query($query));
    $oauth['oauth_signature'] = $signature; //Don't want to abandon all that work!
    ksort($oauth); //Probably not necessary, but twitter's demo does it
    $oauth=array_map("add_quotes", $oauth); //Also not necessary, but twitter's demo does this too  
    //This is the full value of the Authorization line
    $auth="OAuth ".urldecode(http_build_query($oauth, '', ', '));
    //If you're doing post, you need to skip the GET building above and instead supply query parameters to CURLOPT_POSTFIELDS
    $options=array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
                      //CURLOPT_POSTFIELDS => $postfields,
                      CURLOPT_HEADER => false,
                      CURLOPT_URL => $url,
                      CURLOPT_RETURNTRANSFER => true,
                      CURLOPT_SSL_VERIFYPEER => false);
    //Query Twitter API
    $feed=curl_init();
    curl_setopt_array($feed, $options);
    $json=curl_exec($feed);
    curl_close($feed);
    //Return decoded response
    return json_decode($json);
};

//Initializing
$done = false;      //Loop flag
$countCalls=0;      //Api Calls
$countTweets=0;     //Tweets fetched
$intervalTweets=0;  //Tweets in the last WINDOW hour
$twitter_data = new stdClass();
$now=new DateTime(date('D M j H:i:s O Y')); //Current search time

//Fetching starts
do{
    $twitter_data = twitter_search($query,$oauth,$url);
    $countCalls+=1;
    //Partial results, updating the total amount of tweets fetched
    $countTweets += count($twitter_data->statuses);
    //Searching for tweets inside the time window
    foreach($twitter_data->statuses as $tweet){
        $time=new DateTime($tweet->created_at);
        $interval = $time->diff($now);      
        $days=$interval->format('%a');
        $hours=$interval->h;
        $mins=$interval->i;
        $secs=$interval->s;
        $diff=$days*24 + $hours + $mins/60 + $secs/3600;
        if($diff<WINDOW){
            $intervalTweets+=1;
        }else{
            $done = true;
            break;
        }               
    }       
    //If not all the tweets have been fetched, then redo... 
    if(!$done && isset($twitter_data->search_metadata->next_results)){      
        //Parsing information for max_id in tweets fetched
        $string="?max_id="; 
        $parse=explode("&",$twitter_data->search_metadata->next_results);       
        $maxID=substr($parse[0],strpos($parse[0],$string)+strlen($string));     
        $query['max_id'] = -1+$maxID; //Returns results with an ID less than (that is, older than) or equal to the specified ID, to avoid getting the same last tweet
        //Twitter will be queried again, this time with the addition of 'max_id'        
    }else{      
        $done = true;
    }   
}while(!$done);

//If all the tweets have been fetched, then we are done
echo "<p>query: ".urldecode($query['q'])."</p>";
echo "<p>tweets fetched: ".$countTweets."</p>";
echo "<p>API calls: ".$countCalls."</p>";
echo "<p>tweets in the last ".WINDOW." hour: ".$intervalTweets."</p>";
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP Twitter API 搜索/推文 仅获取上一小时的推文 的相关文章

  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • 自定义 WP 主题时,我应该将导航栏放在“”标签之前还是之后?

    我正在通过制作子主题来自定义 WP 主题 我将 Bootstrap 中的导航栏放入子主题目录中的 header php 文件中 但是 我不确定在哪里放置导航栏代码 我可以把它都放在前面and之后标记成功 例如 无论我选择哪一个 导航栏都显示
  • 如何复制 ArrayIterator 以保留其当前迭代位置?

    因为这似乎是我必须做的才能达到这种效果 arr a gt first b gt second iter new ArrayIterator arr Do a bunch of iterations iter gt next new iter
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • PHP:读取字体文件的 TrueType/OpenType 元数据

    如何阅读字体详细信息 例如 字体在其元数据中包含版权 姓氏 设计者 版本等信息 我还希望脚本能够计算文件中的字形数量 并返回字体支持的语言 例如 典型的字体可能包含西方语言 瑞典语和罗马语言支持 并具有数百个字形 它应该支持 truetyp
  • Magento - 检查 cms 页面

    我想通过 php 检查页面是否是 Magento 中的 cms page 我需要不同的 cms 页面面包屑 所以我尝试在一个条件下做到这一点 但我不知道如何或在哪里查看 到目前为止 这是我的 breadcrumbs phtml p some
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • postgreSql 中特定时间后表更新

    我已经在 postgres 中创建了表 现在我想在特定时间 例如 1 小时 后更新一行 我看到很多问题 例如 https dba stackexchange com questions 56424 column auto updated a
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • Joomla 页面中的自定义 php 代码

    我正在尝试将 Joomla 1 5 9 页面中的表源从页面中的硬编码 html 更改为从 SQL 数据库获取信息 执行此操作的正确方法是什么 创建一个新的模型或组件并以某种方式在页面中使用它 我找到了这些 http docs joomla
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正
  • 保存多对多关系,同步/附加不存在?

    我有以下两个多对多关系的模型 use Illuminate Database Eloquent Model class Permission extends Model The database table used by the mode
  • 检查 $_POST 数据

    我正在对表单进行一些垃圾邮件检查 下面的代码在我的本地主机上正常工作 如果为 true 则重定向到 google com 但是 当它在生产服务器上时却不起作用 执行脚本的其余部分并且不重定向到 Google com if POST SERV
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad

随机推荐

  • 将二进制浮点“1101.11”转换为十进制(13.75)的正确算法?

    我用C编写了一个程序来转换浮点数以二进制表示 http kipirvine com asm workbook floating tut htm 1101 11 化为小数 13 75 但是 我似乎无法从算法中获得正确的值 将二进制浮点数转换为
  • JavaScript 中的“闭包”到底指的是什么?

    我理解闭包是什么 但我在理解这个术语到底是什么时遇到了一些困难closure指 我在许多网站上看到过这个术语 但很少有人就其实际定义达成一致 是保存在栈帧上的变量吗 是返回的函数吗 它是外部函数的范围吗 它是内部 返回 函数的范围吗 是不是
  • 如何在 Swift 3 中测试 URL 并获取状态代码?

    我正在使用最新版本的 Xcode 撰写本文时为 8 1 它使用 Swift 3 0 我想做的就是获取一个字符串 将其转换为 URL 并测试该 URL 看看它是否会给出 404 错误 我已经能够使用以下方法创建 URL 和 URLReques
  • Node.JS 内核模式线程

    我试图弄清楚 Node JS 其 Windows 版本 是如何在幕后工作的 我知道有用户模式和内核模式线程 并且我知道处理模型如下所示 我还知道从内核模式线程移动到用户模式线程被认为是上下文切换 Node JS C 非阻塞工作线程是内核模式
  • Angular2 在模板和变更检测中的功能

    我试图在服务中构建一种方法 检查是否应根据当前用户的权限向当前用户显示导航按钮 我知道这只是装饰性的 安全性 因此这是放置在模板内的按钮
  • 尾随返回类型中的占位符是否会覆盖初始占位符?

    g 似乎接受任意组合auto and decltype auto 作为初始和尾随返回类型 int a auto f return a int auto g gt auto return a int auto h gt decltype au
  • 关于 DSO 引用隐藏符号的警告究竟意味着什么?

    我在将某些共享库与 g 链接时遇到问题 它给了我这样的警告 hidden symbol XXX in YYY is referenced by DSO usr lib 我已经阅读了一些有关特定问题的相关问题 但我想从整体上理解它 这个警告是
  • 如何授予jnlp文件中依赖lib的所有权限?

    我在使用 Java Web Start 时遇到了一个严重的问题 我无法理解 情况如下 我有一个 JavaFX 应用程序 编写为 Java8 我想使用 Java WebStart 进行部署 直到最近 我还使用 HTTP 与服务器进行通信 一切
  • 仅在 Spring Data Rest 中为子资源级别启用存储库?

    我有 2 个 jpa 实体 Document 和 DispatchDetail 它们具有一对多关系 即一个文档可以有一个dispatchDetails 列表 我为每个实体创建了 2 个存储库 现在我要尝试文档 GET http localh
  • Django MakeMessages 在 Windows 中缺少 xgettext

    在 Windows 7 上运行 Django 我目前正在尝试使用 django 书籍第 19 章中的说明翻译几个 Django 模板 我已向模板添加了翻译标签 加载了 I18N 并修改了 django 设置 然后我运行 django adm
  • 快速地,为什么当协议有初始化器时我不能实例化它?

    据我所知 通常我无法实例化协议 但是 如果我在协议中包含一个初始化程序 那么编译器肯定知道当结构或类稍后使用该协议时 它将有一个可以使用的 init 吗 我的代码如下所示 protocol Solution var answer Strin
  • 无法连接到服务器:net/http:TLS 握手超时

    在 minikube for windows 上 我在 kubernetes 集群上创建了一个部署 然后尝试通过将副本从 1 更改为 2 来扩展它 之后 kubectl 挂起 我的磁盘使用率为 100 我的部署中只有一个容器 apiVers
  • 单击按钮后立即执行 SwiftUI 按钮操作,而不是单击释放时

    我想在 SwiftUI Button 中单击 点击按钮后立即调用该操作 我怎样才能实现这个 这是一种可能的方法 使用自定义ButtonStyle注入自定义触地动作 使用 Xcode 12 iOS 14 进行测试 struct Pressed
  • com.sun.ws.rs.ext.RuntimeDelegateImpl 错误

    请帮忙 目前我正在构建一个系统 允许一些Web服务 Axis2 调用restful jersey 1 12 场景是这样的 客户端 gt webservice Axis2 gt Restful services Jersey 1 12 在 t
  • 如何使用 SqlCommand 创建带有参数化数据库名称的数据库?

    简而言之 我有两个简单的助手 private SqlCommand CreateCommand string text SqlCommand cmd new SqlCommand cmd Connection connection cmd
  • Tinymce 4.x 扩展插件

    我正在寻找一些有关如何扩展现有的tinymce 4 x 插件的示例 例如 链接 插件 链接插件打开一个对话框窗口 我想做的是在对话框打开时添加一个事件并修改正文 插入一些带有单击事件的额外 HTML 做得好似乎是有问题的 我想避免一些 顶部
  • 生成两个相关的随机向量

    我想生成两个具有指定相关性的随机向量 第二个向量的每个元素必须与第一个向量的相应元素相关并且相互独立 我怎样才能在 MATLAB 中做到这一点 顺便说一句 第一个向量的元素不具有相同的分布 我的意思是第一个向量的每个元素应该具有不同的方差
  • Py_Finalize() 会导致 Python 3.9 出现分段错误,但不会导致 Python 2.7

    我正在开发一个使用 C matplotlib 包装器的项目matplotlibcpp h https github com lava matplotlib cpp 使用这个原始头文件的最小示例是 include matplotlibcpp
  • 如何为 Android 制作自定义地点选择器

    据我所知 谷歌不允许开发人员自定义地点选择器布局 所以我想制作一个如下图所示的地点选择器 它来自 Deliveroo 应用程序 我使用了地图 api 但它并不完全像这张照片 这个选择器的行为类似于地点选择器 api 它是定制的 这是我的代码
  • PHP Twitter API 搜索/推文 仅获取上一小时的推文

    您好 我一直在互联网上查找 但尚未找到解决方案 我只想获取过去一小时内具有特定主题标签的推文 我正在使用该主题标签提取推文 但我不知道如何只获取过去一小时的推文 这是一些示例数据 正如您所看到的 那里有一个created at日期 但我不知