当前位置: > > > PHP - 实现奇妙清单(wunderlist)任务批量导入功能

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应用。
地址:https://developer.wunderlist.com/apps/new

2,创建后我们可以得到这个应用的注册信息

3,获取授权
(1)我们可以在浏览器中出入如下格式的 url,重定向到 Wunderlist 网站上获取 Wunderlist 帐号对这个应用的授权。
https://www.wunderlist.com/oauth/authorize?client_id=ID&redirect_uri=URL&state=RANDOM
其中 client_id 就是前面生成的 CLIENT IDredirect_uri 是授权后要重定向的地址。state 随便填。所以这里我们使用如下 url 地址:
https://www.wunderlist.com/oauth/authorize?client_id=1964b41c764e03988257&redirect_uri=http://www.hangge.com&state=RANDOM

(2)在跳转过来的登录页中输入 Wunderlist 的帐号密码后,点击登录。

(3)登录后询问是否需要授权,点击授权。

(4)授权后浏览器跳转,我们可以得到 code

4,将code转换成access token
我们将 client_idclient_secretcodePOST 的方式发送到:https://www.wunderlist.com/oauth/access_token
即可得到对应的 access token
这里我直接使用 Chrome 插件 Postman 来发送请求(点击查看Postman的使用方法),就不再专门写个页面来发送了。


二、调用接口实现导入
我们有了 access tooken,加上前面的 client id。将它们放在 HTTP 请求头(HTTP request headers)就可以调用 Wunderlist 的各个接口了。
1,查询清单id
想要将任务导入到清单中,首先要得到这个清单的 id。这里先通过 a.wunderlist.com/api/v1/lists 获取所有清单信息。(注意:我在请求头中添加了 X-Client-IDX-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>";
  }
}
?>
执行完毕后,页面上显示出执行结果:

打开奇妙清单,发现任务数据也已经添加成功了。
  
评论0