2

最近两天在某个群里跟一个小伙伴聊了一下自己在手机上使用APP,很意外的是我两都是Pocket的忠实用户,就顺便聊了一下自己平时都是看一些什么文章,说得比较多...对于我个人来说,Pocket基本上就是我在手机上或者PC网页上看过的所有我认为的好文集合,因为在品诗睡觉前看文章的时候,我都习惯性地将自己认为好的文章收藏到Pocket中。既然这样为什么不直接将整个Pocket的阅读列表分享给别人看一些呢,晒一晒自己的“阅读轨迹”,于是乎就想到调用一下Pocket API,将阅读列表直接放在自己的博客里,具体可以查看:我的Pocket列表

好了,废话说了这么多,来看看这个实施过程:
到Pocket的官网去看了一下官方文档,貌似Pocket现在还不支持个人用户获取整个文章内容,但是可以获取到文章的标题,摘要,原来的网址,标签等内容,那就无压力了撒,知道网址就OK了。

然后我就在Pocket中创建了一个私人的APP,因为在调用API的时候需要两个重要的数据:

  1. consumer_key
  2. access_token

其中consumer_key可以在创建APP之后获得,由Pocket官网分配,access
_token则可以在运行你APP时获得。比如以下的一段代码:
config.php

    <?php 
        //这里填上你创建APP时获得的consumer_key       
        $consumer_key = 'YOUR_CONSUMER_KEY_HERE';

        // path.to 就是你网站的主机域名,比如http://www.jellybool.com/callback.php.

        $redirect_uri = 'http://path.to/callback.php';

        //在你认证Pocket之前,这个YOUR_ACCESS_TOKEN_HERE你可以先不要填,在连接的时候Pocket会给你一个access_token
        $access_token = 'YOUR_ACCESS_TOKEN_HERE';
        ?>

首先,我们需要运行一下connect.php来跟Pocket进行认证

    <?php

        require_once('config.php');
        $url = 'https://getpocket.com/v3/oauth/request';
        $data = array(
            'consumer_key' => $consumer_key, 
            'redirect_uri' => $redirect_uri
        );
        $options = array(
            'http' => array(
                'method'  => 'POST',
                'content' => http_build_query($data)
            )
        );
        $context  = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        // $result在返回的结果中就包含了access_token
        $code = explode('=',$result);
        $request_token = $code[1];

        // 到这里 需要重定向到Pocket,以获取access_token
        header("Location: https://getpocket.com/auth/authorize?request_token=$request_token&redirect_uri=$redirect_uri?request_token=$request_token");

    ?>


下面来看看callback.php是如何运行的:


<?php require_once('config.php'); $request_token = $_GET['request_token']; $url = 'https://getpocket.com/v3/oauth/authorize'; $data = array( 'consumer_key' => $consumer_key, 'code' => $request_token ); $options = array( 'http' => array( 'method' => 'POST', 'content' => http_build_query($data) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); // $result在返回的结果中就包含了access_token $access_token = explode('&',$result); if($access_token[0]!=''){ echo "<h1>牛逼啊,你已成功认证Pocket!</h1>"; echo "你的access_token是: ". $access_token[0]; } else{ echo "艾玛出错了 :( "; } ?>

到此,我们已经获取到Pocket的consumer_keyaccess_token,我们能干嘛呢?构造URL来调用API撒,于是我试了一下:

    <?php
        require_once('config.php');
        /* 关于更多的Pocket API参数,直接看文档
            这里我只取回最近收藏的5篇文章。
            API 查看地址: http://getpocket.com/developer/docs/v3/retrieve
         */
        $url = 'https://getpocket.com/v3/get?count=5';
        $data = array(
            'consumer_key' => $consumer_key, 
            'access_token' => $access_token
        );
        $options = array(
            'http' => array(
                'method'  => 'POST',
                'content' => http_build_query($data)
            )
        );
        $context  = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        var_dump($result);
    ?>

我来说说几个常用的:

tag

  1. tag_name = 只返回有标签的

  2. untagged = 只返回没有标签的

contentType

  1. article = 只返回文章

  2. video = 只返回视频或者内嵌视频的

  3. image = 只返回图片

detailType

  1. simple = 只返回标题和url

  2. complete = 返回文章的标签,图片,作者,摘要,视频等

注意:Pocket 返回json数据

如果你只是想简单地看看返回什么东西,直接复制下面的url,放到Chrome的地址栏,Enter看看:Bingo.

    https://getpocket.com/v3/get?consumer_key=$consumer_key&access_token=$access_token&state=all&contentType=article&sort=newest&detailType=complete


JellyBool
16.2k 声望2k 粉丝

给学网 GeiXue.com 创始人:让每一个热爱编程的人都学有所成的精品课程。