再次研究了一下点点博客API

继昨天之后,今天又研究了一下点点的API,其他的基本都看懂了,唯独有一点还搞不懂,就是form表单中有 enctype=”multipart/form-data”,request就无法传递各个参数。下面放出各个文件的源代码及其说明:

list.php:

<?php
                include( 'config.php' );
                include( 'diandian.class.php' );
                /*数据库中查询Refresh Token*/
                sql='SELECT * FROM `'.db_name.'`';
                it = mysql_query(sql);
                refresh_token=mysql_fetch_array(it);
                //echo 'refresh_token[0]:'.refresh_token[0].'<br />';refresh = "https://api.diandian.com/oauth/token?client_id=".client_id."&client_secret=".client_secret."&grant_type=refresh_token&refresh_token=".refresh_token[0];var = '';
                json = curl_data(refresh,var);
                //var_dump(json);
                //对 JSON 格式的字符串进行编码
                refresh_info = json_decode(json,true); 
                refresh_token_new =refresh_info['refresh_token'];
                //echo 'refresh_token_new:'.refresh_token_new.'<br>';

                /*把新的Refresh Token写入数据库*/
                if(refresh_token_new!=''){
                        sql_new = 'UPDATE `'.db_name.'` SET `'.db_name.'`="'.refresh_token_new.'"';        
                        it_1=mysql_query(sql_new)or die('update failed!');
                }
                //echo refresh_token;access_token = refresh_info['access_token'];
                echo 'access_token:<br>'.access_token;
                form_url = "https://api.diandian.com/v1/blog/".blog_url."/posts/photo?limit=1&access_token=".access_token."";var_new = '';
                json_new = curl_data(form_url,var_new);form_url_info = json_decode(json_new,true);
                //echo '<img src="'.form_url_info["response"]["posts"][0]["photos"][0]["altSizes"]["default"]["url"].'">';
                echo '
                <form action="https://api.diandian.com/v1/blog/'.blog_url.'/post" method="post" >
                        <input type="text" name="access_token" value="'.access_token.'" hidden="hidden">
                        <input type="text" name="state" value="published" hidden="hidden">
                        <input type="text" name="title">
                        <input type="text" name="body">
                        <input type="submit" value="提交">
                </form>
                ';
?>

注解:

1、因为我不太懂怎么通过长期的refresh token获取1小时就过期的access token,于是干脆每次打开页面就刷新refresh token 从而获取access token,然后每次把refresh token写入数据库(蠢办法_(:3」∠)_),所以首先要在建立一个数据库

CREATE DATABASE refresh_token;

然后加个表:

CREATE TABLE refresh_token(
refresh_token varchar(80) NOT NULL
)

然后获取你的第一个refresh token,以后每次自动都会改写这个值

INSERT INTO `refresh_token`.`refresh_token` (`refresh_token`) VALUES ('YOUR_REFRESH_TOKEN');

1、服务器必须支持curl……

2、之前没接触过json(连js也刚学),于是今天学习了一下发现跟数组真的很像,顺便学到了json_encode()这个对JSON格式的字符串进行编码的函数(见14行)

3、就如文章开头所说的,发送文字信息(下面的代码)是没问题的,但是发送图片时,需要用到 enctype=”multipart/form-data” ,提交如下表单就不能正确传递参数了

<form action="https://api.diandian.com/v1/blog/'.blog_url.'/post" method="post" enctype="multipart/form-data">
        <input type="text" name="access_token" value="'.access_token.'" hidden="hidden">
	<input type="text" name="type" value="photo" hidden="hidden">
	<input type="text" name="state" value="published" hidden="hidden">
	<input type="file" name="data">
	<input type="submit" value="提交">
</form>

看到点点官方的API文档,不知道’data’这个参数的类型’MultipartFile’是什么意思?imgur的API是这样的→传送门,跟点点这个有啥区别呢?还是渣浪好,直接一个upload方法就能上传图片和文字了,点点官方都不给个PHP SDK,让我这个小白无从下手……

QQ截图20130817214050

不知道看到这篇文章的人能不能给个解决方案呢,比如用AJAX提交啊(没学Q^Q),用SWF模拟form表单提交啊什么的,求留言!

config.php:

<?php
header('Content-Type: text/html; charset=UTF-8');
db_host=''; //数据库服务器db_name=''; //数据库名
db_user=''; //数据库用户名db_pass=''; //数据库密码
mysql_connect(db_host,db_user,db_pass)or die("mysql connect error"); //连接数据库
mysql_select_db(db_name)or die("select error");
client_id = '';client_secret = '';
$blog_url = ''; //点点博客的URL,不带http://
?>

diandian.class.php:

<?php
/*function curPageURL() 
{
    pageURL = 'http';
    if (_SERVER["HTTPS"] == "on") 
    {
        pageURL .= "s";
    }pageURL .= "://";
    if (_SERVER["SERVER_PORT"] != "80") 
    {pageURL .= _SERVER["SERVER_NAME"] . ":" ._SERVER["SERVER_PORT"] . _SERVER["REQUEST_URI"];
    } 
    else 
    {pageURL .= _SERVER["SERVER_NAME"] ._SERVER["REQUEST_URI"];
    }
    return rtrim(pageURL ,"index.php"); 
}*/
function curl_data(url,data){curl = curl_init(); 
    curl_setopt(curl, CURLOPT_URL,url);
    curl_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);
    curl_setopt(curl, CURLOPT_USERAGENT,_SERVER['HTTP_USER_AGENT']);
    curl_setopt(curl, CURLOPT_POST, 1);
    curl_setopt(curl, CURLOPT_POSTFIELDS, data);
    curl_setopt(curl, CURLOPT_TIMEOUT, 30);
    curl_setopt(curl, CURLOPT_HEADER, 0);
    curl_setopt(curl, CURLOPT_RETURNTRANSFER, 1);
    tmpInfo = curl_exec(curl);
    curl_close(curl);
    returntmpInfo;
}
?>

代码已经托管到了Git:

https://github.com/spoonwep/diandian-blog

这篇文章有2条评论

  1. wjy0 2013/8/20 #1 回复TA

    我能请教你一下discuz电台模式的原理吗? flyjearl@qq.com

发表评论

*

List
Love
00:00