继昨天之后,今天又研究了一下点点的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下工作么?