PHP - 实现奇妙清单(wunderlist)任务批量导入功能
奇妙清单(Wunderlist)是一个好用 To-do 应用,可以很方便地进行各种待办事项的创建和管理。它最大优势则在于跨平台性,支持所有主流平台:iPhone, iPad, Android, Windows Phone, Windows 8, Mac, Chromebook, Kindle Fire,甚至,你只需要能上网,就能使用奇妙清单的网页版。
但至今为止,奇妙清单还没有提供一个批量导入功能。如果手头有大量的任务数据需要导入,手动一个个去添加就太辛苦了。好在奇妙清单官方提供了很丰富的 API 接口。我们可以使用这些接口自己实现个批量导入功能。
(详细的接口文档地址:https://developer.wunderlist.com/documentation)
一、准备工作
1,在官网上注册一下App
要使用 Wunderlist 的接口,首先我们需要到其开发者网站上新建一个App应用。
2,创建后我们可以得到这个应用的注册信息
3,获取授权
(1)我们可以在浏览器中出入如下格式的 url,重定向到 Wunderlist 网站上获取 Wunderlist 帐号对这个应用的授权。
https://www.wunderlist.com/oauth/authorize?client_id=ID&redirect_uri=URL&state=RANDOM其中 client_id 就是前面生成的 CLIENT ID。redirect_uri 是授权后要重定向的地址。state 随便填。所以这里我们使用如下 url 地址:
https://www.wunderlist.com/oauth/authorize?client_id=1964b41c764e03988257&redirect_uri=http://www.hangge.com&state=RANDOM
(3)登录后询问是否需要授权,点击授权。
(4)授权后浏览器跳转,我们可以得到 code
4,将code转换成access token
我们将 client_id、client_secret、code 以 POST 的方式发送到:https://www.wunderlist.com/oauth/access_token
我们将 client_id、client_secret、code 以 POST 的方式发送到:https://www.wunderlist.com/oauth/access_token
即可得到对应的 access token。
我们有了 access tooken,加上前面的 client id。将它们放在 HTTP 请求头(HTTP request headers)就可以调用 Wunderlist 的各个接口了。
1,查询清单id
想要将任务导入到清单中,首先要得到这个清单的 id。这里先通过 a.wunderlist.com/api/v1/lists 获取所有清单信息。(注意:我在请求头中添加了 X-Client-ID 和 X-Access-Token 这两个参数属性。)
2,将数据导入到清单中
下面通过 php 代码将任务列表批量添加到“想看的电影”这个清单中(作为演示,这里要插入的任务列表我就直接使用在程序中定义的数组,其中有6条数据。实际使用中我们可以改成从外部文件读取。)
这里调用的接口是:a.wunderlist.com/api/v1/tasks。(我们遍历任务,并调用这个接口一个个添加。)
打开奇妙清单,发现任务数据也已经添加成功了。
<?php //数值 0 表示没有执行时间的限制 ini_set('max_execution_time', '0'); /** **封装cURL的调用接口,post的请求方式。 **/ function doCurlPostRequest($url, $requestString = "", $header = [], $timeout = 5){ if($url == '' || $timeout <=0){ return false; } $curl = curl_init((string)$url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 curl_setopt($curl, CURLOPT_POSTFIELDS, $requestString); curl_setopt($curl, CURLOPT_POST,true); curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); curl_setopt($curl, CURLOPT_TIMEOUT,(int)$timeout); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //添加自定义的http header return curl_exec($curl); } $url = "https://a.wunderlist.com/api/v1/tasks"; $header[] = "X-Client-ID:1964b41c764e03988257"; $header[] = "X-Access-Token:4effefebb064efa028a2f1f5cd79c7d74965436743858048f3c0cfc30508"; $header[] = "Content-Type: application/json"; //数据是raw形式的json格式数据 $arr = [ ["肖申克的救赎","1994-09-10"], ["这个杀手不太冷","1994-09-14"], ["霸王别姬","1993-01-01"], ["阿甘正传","1994-06-23"], ["盗梦空间","2010-09-01"], ["千与千寻","2001-07-20"] ]; foreach($arr as &$value) { $data = '{ "list_id": 267235055, "title": "'.$value[0].'", "due_date": "'.$value[1].'" }'; //执行添加操作 $resule = doCurlPostRequest($url, $data, $header); //输出结果 echo $value[0]." -- "; $obj = json_decode($resule); if($obj == null || property_exists($obj, 'error')){ echo "失败<br>"; }else{ echo "成功<br>"; } } ?>执行完毕后,页面上显示出执行结果:
打开奇妙清单,发现任务数据也已经添加成功了。