使用sae定时任务实现终身自动发表微博(PHP实现)
2014-06-16 23:20
239 查看
使用sae定时任务实现终身自动发表微博(PHP实现)
实例环境:
新浪微博sae平台申请的二级开发域名,使用thinkphp框架。
关于thinkphp到sae的代码移植这里不讨论。
关于sae的授权认证,这里不讨论。
关于sae的mysql,kvdb如何使用,这里不讨论。
以上入门知识请参看:
http://doc.thinkphp.cn/manual/sae_intro.html
原理:
任务1:讲时间线的微博抓取,存到缓存;
任务2:从缓存取出第一条,发表,从缓存删除。
本应用预备的数据库:
sae_wid:
字段 类型 说明
wid long long 授权帐号的uid
token var char 授权帐号的access_token
其他字段略(expired_in,auth_time,screen_name,...)
在ThinkPHP中直接加Action,不用加Tpl。
这里直接上代码:
/* GraspAction.php */
include_once( APP_PATH.'/Conf/config_svn.php' );
import('@.ORG.saetv2');
/**
* 随机抓取微博
*/
class GraspAction extends Action {
protected function _initialize() {
header("Content-Type:text/html; charset=utf-8");
}
public $myacct = '14********';//微博
public $listen_list = array(
'微博昵称1',
'微博名称2',
'**笑话**',
'我的前任**',
'搞笑热咨询',
'趣闻搞笑',
'搞笑图片会',
);
// 从时间线抓取微博
public function mining()
{
$uid = $this->myacct;
// 从数据库查找 myacct 的 token
// 获取 uid 的 accessToken
$mysql = new SaeMysql();
try {
$u = $mysql->getData('SELECT wid,token FROM sae_wid WHERE wid='.$uid);
} catch (Exception $e) {
$this->error($e->getMessage());
}
if (empty($u))
{
$this->error('cannot get data from Sae Mysql');
}
$token = $u[0]['token'];
// 将时间线的有名微博抓出来
$c = new SaeTClientV2(WB_AKEY, WB_SKEY, $token);
$ms = $c->home_timeline();
if (isset($ms['error']))
{
$this->error($ms['error']);
}
dump(count($ms['statuses']));
$line = $ms['statuses'];
$houxuan = array();
for ($i=0; $i<count($line); ++$i)
{
if (in_array($line[$i]['user']['name'], $this->listen_list))
{
$houxuan[] = $line[$i];
}
}
// 存入缓存
F('weibohouxuan', json_encode($houxuan));
print_r('F(weibohouxuan)='.json_encode(F('weibohouxuan')));
}
// 将缓存的候选内容发表到微博,并删除
public function put()
{
// 获取 token
$uid = $this->myacct;
$mysql = new SaeMysql();
try {
$u = $mysql->getData('SELECT wid,token FROM sae_wid WHERE wid='.$uid);
} catch (Exception $e) {
$this->error($e->getMessage());
}
if (empty($u))
{
$this->error('cannot get data from Sae Mysql');
}
$token = $u[0]['token'];
// 获取缓存内容列表
$houxuan = json_decode(F('weibohouxuan'), true);
// 取出一条 并从缓存列表删除
$one = array_shift($houxuan);
//dump($one);return false;
if (empty($one))
{
$this->error('No candicate weibo content!');
}
$text = $one['text'];
//dump($text);return false;
$c = new SaeTClientV2( WB_AKEY , WB_SKEY , $token);
// 如果有图片,使用图片发布接口
if (isset($one['original_pic']) && !empty($one['original_pic']))
{
//$ret = $c->upload_url_text($text, $one['original_pic']);
$ret = $c->upload($text, $one['original_pic']);
print_r('put pic :'.json_encode($ret));
}
else // 无图片 使用无图片接口
{
$ret = $c->update($text);
print_r('put :'.json_encode($ret));
}
F('weibohouxuan', json_encode($houxuan));
}
// 将缓存的候选内容显示
public function show()
{
// 获取 token
$uid = $this->myacct;
$mysql = new SaeMysql();
try {
$u = $mysql->getData('SELECT wid,token FROM sae_wid WHERE wid='.$uid);
} catch (Exception $e) {
$this->error($e->getMessage());
}
if (empty($u))
{
$this->error('cannot get data from Sae Mysql');
}
$token = $u[0]['token'];
// 获取缓存内容列表
$houxuan = json_decode(F('weibohouxuan'), true);
dump($houxuan);
return true;
}
}
/* GraspAction.php over */
下面是sae的cron设置,对应文件 config.yaml
name: dajiayiqier
version: 2
handle:
- directoryindex: index.php
accesskey: dajiayiqier.sinaapp.com
cron:
- description: another cron put
url: w/index.php/Grasp/put
schedule: */55 * * * *
- description: another cron get
url: w/index.php/Grasp/minnine
schedule: 15 */6 * * *
关于crontab格式,不介绍,贴吧中不允许发太多连接,自己查。
祝大家微博玩得愉快!
实例环境:
新浪微博sae平台申请的二级开发域名,使用thinkphp框架。
关于thinkphp到sae的代码移植这里不讨论。
关于sae的授权认证,这里不讨论。
关于sae的mysql,kvdb如何使用,这里不讨论。
以上入门知识请参看:
http://doc.thinkphp.cn/manual/sae_intro.html
原理:
任务1:讲时间线的微博抓取,存到缓存;
任务2:从缓存取出第一条,发表,从缓存删除。
本应用预备的数据库:
sae_wid:
字段 类型 说明
wid long long 授权帐号的uid
token var char 授权帐号的access_token
其他字段略(expired_in,auth_time,screen_name,...)
在ThinkPHP中直接加Action,不用加Tpl。
这里直接上代码:
/* GraspAction.php */
include_once( APP_PATH.'/Conf/config_svn.php' );
import('@.ORG.saetv2');
/**
* 随机抓取微博
*/
class GraspAction extends Action {
protected function _initialize() {
header("Content-Type:text/html; charset=utf-8");
}
public $myacct = '14********';//微博
public $listen_list = array(
'微博昵称1',
'微博名称2',
'**笑话**',
'我的前任**',
'搞笑热咨询',
'趣闻搞笑',
'搞笑图片会',
);
// 从时间线抓取微博
public function mining()
{
$uid = $this->myacct;
// 从数据库查找 myacct 的 token
// 获取 uid 的 accessToken
$mysql = new SaeMysql();
try {
$u = $mysql->getData('SELECT wid,token FROM sae_wid WHERE wid='.$uid);
} catch (Exception $e) {
$this->error($e->getMessage());
}
if (empty($u))
{
$this->error('cannot get data from Sae Mysql');
}
$token = $u[0]['token'];
// 将时间线的有名微博抓出来
$c = new SaeTClientV2(WB_AKEY, WB_SKEY, $token);
$ms = $c->home_timeline();
if (isset($ms['error']))
{
$this->error($ms['error']);
}
dump(count($ms['statuses']));
$line = $ms['statuses'];
$houxuan = array();
for ($i=0; $i<count($line); ++$i)
{
if (in_array($line[$i]['user']['name'], $this->listen_list))
{
$houxuan[] = $line[$i];
}
}
// 存入缓存
F('weibohouxuan', json_encode($houxuan));
print_r('F(weibohouxuan)='.json_encode(F('weibohouxuan')));
}
// 将缓存的候选内容发表到微博,并删除
public function put()
{
// 获取 token
$uid = $this->myacct;
$mysql = new SaeMysql();
try {
$u = $mysql->getData('SELECT wid,token FROM sae_wid WHERE wid='.$uid);
} catch (Exception $e) {
$this->error($e->getMessage());
}
if (empty($u))
{
$this->error('cannot get data from Sae Mysql');
}
$token = $u[0]['token'];
// 获取缓存内容列表
$houxuan = json_decode(F('weibohouxuan'), true);
// 取出一条 并从缓存列表删除
$one = array_shift($houxuan);
//dump($one);return false;
if (empty($one))
{
$this->error('No candicate weibo content!');
}
$text = $one['text'];
//dump($text);return false;
$c = new SaeTClientV2( WB_AKEY , WB_SKEY , $token);
// 如果有图片,使用图片发布接口
if (isset($one['original_pic']) && !empty($one['original_pic']))
{
//$ret = $c->upload_url_text($text, $one['original_pic']);
$ret = $c->upload($text, $one['original_pic']);
print_r('put pic :'.json_encode($ret));
}
else // 无图片 使用无图片接口
{
$ret = $c->update($text);
print_r('put :'.json_encode($ret));
}
F('weibohouxuan', json_encode($houxuan));
}
// 将缓存的候选内容显示
public function show()
{
// 获取 token
$uid = $this->myacct;
$mysql = new SaeMysql();
try {
$u = $mysql->getData('SELECT wid,token FROM sae_wid WHERE wid='.$uid);
} catch (Exception $e) {
$this->error($e->getMessage());
}
if (empty($u))
{
$this->error('cannot get data from Sae Mysql');
}
$token = $u[0]['token'];
// 获取缓存内容列表
$houxuan = json_decode(F('weibohouxuan'), true);
dump($houxuan);
return true;
}
}
/* GraspAction.php over */
下面是sae的cron设置,对应文件 config.yaml
name: dajiayiqier
version: 2
handle:
- directoryindex: index.php
accesskey: dajiayiqier.sinaapp.com
cron:
- description: another cron put
url: w/index.php/Grasp/put
schedule: */55 * * * *
- description: another cron get
url: w/index.php/Grasp/minnine
schedule: 15 */6 * * *
关于crontab格式,不介绍,贴吧中不允许发太多连接,自己查。
祝大家微博玩得愉快!
相关文章推荐
- php的_autoload函数实现自动加载类的使用
- 使用PHP实现自动生成验证码
- php中使用__autoload()自动加载未定义类的实现代码
- PHP 使用命名空间(namespace),实现自动加载
- asterisk 使用php脚本socket通过AMI端口实现自动打电话报警
- (git)Bitbucket使用WebHook实现自动部署PHP代码
- 使用php自动备份数据库表的实现方法
- AJAX实现页面无刷新发表评论(post请求,服务器端使用php)
- PHP实现发表文章时自动保存图片
- 【转】使用 jQuery(Ajax)/PHP/MySQL实现自动完成功能
- 使用"函数递归"实现基于php和MySQL的动态树型菜单
- 使用php重新实现PHP脚本引擎内置函数
- 实现Weblogic应用的灵活、自动、快速部署:使用wlst+ant+jython+xbean
- [原创]用Dreamweaver的模板,PHP和JavaScript实现自动设定当前被选菜单
- 使用Pear和php socket来实现通过smtp验证发送邮件
- 使用ASP.NET Atlas AutoComplete Behavior或AutoComplete Extender实现自动完成功能(下)
- 使用 HttpWebRequest 轻松实现站外提交(可用于自动登陆,自动网上投票等)
- 安装GD库-部分节选自www.troyoo.comPHP中实现大图自动缩成小图(及GD库的安装)
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#