我正在尝试使用 Google_CalendarService 检索所有事件。到目前为止,我正在通过重复事件检索所有内容,但有些事件没有出现。
示例:我在 22-okt、23-okt 和 24-okt 有事件。它们都是正常事件,但我得到的只有 22 和 23。24 没有出现,但它确实存在于我的日历中!
[更新] 发现另一个问题!每次我通过我的应用程序编辑现有事件时,该事件都会消失,但确实存在于日历中!
这是我获取数据的代码:
API 设置:
function calSettings(){
$client = new Google_Client();
$cal = new Google_CalendarService($client);
$client->setAccessType('offline');
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
}
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
$sessionToken = json_decode($_SESSION['token']);
$this->Cookie->write('token', $sessionToken->refresh_token, false, '1 month');
}
$cookie = $this->Cookie->read('token');
if(!empty($cookie)){
$client->refreshToken($this->Cookie->read('token'));
}
$serviceArr = array('client' => $client, 'service' => $cal);
return $serviceArr;
}
获取事件:
public function initCalendar($ownerCalendarId = null, $eventID = null){
$serviceArr = $this->calSettings();
$client = $serviceArr['client'];
$cal = $serviceArr['service'];
$wandaCalendarId = 'gmail@gmail.com';
if ($client->getAccessToken()) {
/************* Code entry *************/
if($eventID != null){
$events = $cal->events->get($ownerCalendarId, $eventID);
}else{
$ownerEvents = $cal->events->listEvents($ownerCalendarId);
if($ownerCalendarId != $wandaCalendarId){
$wandaEvents = $cal->events->listEvents($wandaCalendarId);
$events = array('owner' => $ownerEvents, 'wanda' => $wandaEvents);
}else{
$events = array('owner' => $ownerEvents, 'wanda' => '');
}
}
return $events;
}else{
/************* Not connected to google calendar code *************/
$authUrl = $client->createAuthUrl();
$returnArr = array('status' => 'false', 'message' => "<a class='login' href='$authUrl'>Connect Me!</a>");
return $returnArr;
}
}
所以使用这段代码,我得到了大部分事件,为什么其他事件没有出现?以前有人遇到过这个问题吗?
最佳答案
好的,终于知道如何获取所有事件了!
有趣的是,您确实获得了所有事件,但以 250 个事件为一组。如果您有超过 250 个事件,您将在 JSON 响应中获得一个页面标记。使用页面 token 获取下一批事件!
关于编辑部分?我注意到,当您编辑一个事件时,该事件将被抛出到事件列表的底部。因此,您获得的事件按上次编辑排序。
为避免使用不需要的数据或保持简单,您可以使用 timeMin 和 timeMax 过滤事件。根据您的操作,您可以动态设置它以更改请求查询。
这是我使用页面标记获取我想要的事件的版本:
$minCheck = date(DATE_ATOM, mktime(0, 0, 0, 1, 1, date("Y") -1));
$maxCheck = date(DATE_ATOM, mktime(0, 0, 0, 12, 31, date("Y") +1));
do{
if(isset($result['nextPageToken'])){
$result= $cal->events->listEvents($calendarId, array('singleEvents' => 'true', 'pageToken' => $result['nextPageToken'], 'timeMin' => $minCheck, 'timeMax' => $maxCheck));
}else{
$result= $cal->events->listEvents($calendarId, array('singleEvents' => 'true', 'timeMin' => $minCheck, 'timeMax' => $maxCheck));
}
array_push($totalResult, $result['items']);
}while(isset($result['nextPageToken']) && !empty($result['nextPageToken']));
关于php - Google Calendar API PHP listEvents 不检索所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13066166/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token
我们有一个字符串:“”这个正则表达式://i如何从当前字符串中获取所有匹配项? 最佳答案 "".scan(//)参见scan在ruby-docs上 关于ruby-如何遍历Ruby中所有正则表达式匹配的字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6857852/
是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什