继昨天之后,今天又研究了一下点点的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,让我这个小白无从下手……
不知道看到这篇文章的人能不能给个解决方案呢,比如用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:
我能请教你一下discuz电台模式的原理吗? flyjearl@qq.com
工作原理的话插件里都应该有写 0.0 是说怎么在DZ下工作么?