PageCookery微信机器人

上传API文件到网站,微信添加PageCookery公共账号即可使用(下面有详细使用教程说明)。本机器人建立初功能比较薄弱,仅有绑定账号,发表状态功能,后续博主会再接再厉增加更多功能的。个人认为此微信公共账号变相地解决了PageCookery的手机客户端的问题。本账号还处于婴儿阶段,并未作过多的测试,欢迎大家反馈。

使用教程:

第一步:下载wechat.php并上传到PageCookery的根目录(请保证文件名为wechat.php)

wechat.php源代码(请自行保存以下代码并上传至PageCookery根目录):

<?php 
include"config.php";
function sql_query($sqlcon){
    $con=mysql_connect(DATABASE_HOST,DATABASE_USER,DATABASE_PSSWORD);
    mysql_select_db(DATABASE_DB_NAME);
    mysql_query("SET NAMES 'utf8'");
    $result=mysql_query($sqlcon);
    mysql_close($con);
    return $result;
}
if(!isset($_GET['do'])) $_GET['do'] = '';
switch($_GET['do']){
    case'auth':
        $user=sql_query("SELECT * FROM user WHERE id= '".$_POST['usr']."'");
        $user=mysql_fetch_array($user);
        $pwd=md5($user['username'].$user['password']);
        if($pwd===$_POST['auth']){
            $j = array('code'=>true, 'message'=>'绑定成功,现在你可以发一条消息试试了!');
        }else{
            $j = array('code'=>false, 'message'=>'绑定失败,请输入正确的信息!');
        }
        echo json_encode($j);
    break;
    case 'post':
        $user=sql_query("SELECT * FROM user WHERE id= '".$_POST['usr']."'");
        $user=mysql_fetch_array($user);
        $pwd=md5($user['username'].$user['password']);
        if($pwd===$_POST['auth']){
            $userid=$_POST['usr'];
            $content=$_POST['content'];
            $time=time();
            $res=sql_query("INSERT INTO entry VALUES ('','0','$content','$time','微信','$userid')");
            if($res){
                $j = array('code'=>true, 'message'=>'发送成功!');
            }else{
                $j = array('code'=>false, 'message'=>'发送失败请稍后再试');
            }
        }else{
            $j= array('code'=>false, 'message'=>'您还未绑定网站或者之前的绑定已失效,请重新绑定!');
        }
        echo json_encode($j);
    break;
    case 'postfromgtalk':
        $user=sql_query("SELECT * FROM user WHERE id= '".$_POST['usr']."'");
        $user=mysql_fetch_array($user);
        $pwd=md5($user['username'].$user['password']);
        if($pwd===$_POST['auth']){
            $userid=$_POST['usr'];
            $content=$_POST['content'];
            $time=time();
            $res=sql_query("INSERT INTO entry VALUES ('','0','$content','$time','Gtalk','$userid')");
            if($res){
                $j = array('code'=>true, 'message'=>'发送成功!');
            }else{
                $j = array('code'=>false, 'message'=>'发送失败请稍后再试');
            }
        }else{
            $j= array('code'=>false, 'message'=>'您还未绑定网站或者之前的绑定已失效,请重新绑定!');
        }
        echo json_encode($j);
    break;
case 'signature':   
    echo '&lt;meta charset="utf-8" http-equiv="content-type" content=""&gt;';
    if(!isset($_POST['username'])) {
        echo '&lt;form method="post" action="./wechat.php?do=signature"&gt;&lt;p&gt;用户名:&lt;input type="text" name="username" value="" /&gt;&lt;/p&gt;&lt;p&gt;密&nbsp;&nbsp;码:&lt;input type="password" name="password" value="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;input type="submit" value="确认" /&gt;';
    } else {
        $user=sql_query("SELECT * FROM user WHERE username = '".$_POST['username']."'");
        $user=mysql_fetch_array($user);
        if(md5($_POST['password']) === $user['password']) {
            $sig = $user['id'].md5($user['username'].$user['password']);
            echo '你的识别码是"'.$sig.'",请发送"-sig '.$sig.'"给PageCookery微信机器人完成绑定!';
        } else {
            echo '用户名或密码错误!';
        }
    }
break;
default:
    $j = array('code'=&gt;true, 'message'=&gt;'微信机器人平台搭建成功!');
    echo json_encode($j);
break;

}
?>

第二步:关注PageCookery微信机器人账号。微信中选择“朋友-添加朋友-查找微信公众账号”,输入pagecookery即可查到机器人账号,添加即可。或者直接扫描下面的二维码即可成功添加。
PageCookery微信机器人

第三步:绑定自己的网站和账号。首先发送消息“-url 你的网站地址”,会让你跳转到另外一个页面,复制地址到浏览器中打开输入你的账号和密码后会返回识别码,复制识别码到微信中发送过去就完成绑定过程了。具体使用见下图:

第一次关注会提示你绑定网站,输入“-url 你的网站地址”即可完成绑定。
绑定账号成功绑定账号成功

复制地址到浏览器中打开,并输入你的PageCookery账号和密码,网页会返回识别码,复制识别码发送给PageCookery微信机器人即可完成绑定。
绑定账号成功绑定账号成功绑定账号成功

如果发送错误的识别码过去,机器人会提示绑定失败。
绑定账号成功

绑定账号完成后直接输入消息就可以发布状态了。
发布状态

为你的PageCookery制作网站挂件(增加97版的支持)

[1g1g]残酷月光-林宥嘉#playID:147633[/]

之前写过一篇为你的PageCookery制作博客挂件,利用的是PageCookery的RSS制作的。今天给大家放的代码是直接读取数据库然后用js的innerhtml引用的方法,此方法适用于任何网站,甚至是HTML页面也是可以的。新分享的方法简单方便而因为读取数据库的原因是实时更新的呢!这里要感谢卜卜口の君的各种指导。

本文需要使用的文件下载:普通下载 | 115下载 | uudisc下载
注意:以上文件适合97版本以前的【不包括97版】PageCookery,如果是97版以后的请拷贝下面的代码。

下载好文件后将其解压,将widget.php和badge.php文件上传到您的PageCookery根目录下,即与config.php同级的目录。然后浏览器输入"您的PageCookery地址+/widget.php",例如我的是http://pagecookery.net/widget.php出现什么了?呵呵~上面已经有提醒了,我就不多说了。

友情提醒:通过定义script地址后面的mount的值可以控制显示的条数哦!我已经定义了许多标签,样式什么的可以尽情的发挥咯!

这里我也直接放出代码出来给那些不愿下载的孩子:

widget.php文件源代码:


JS插件代码|复制代码到你要引用的地方

效果预览:

badge.php文件源代码(适合97版本以前的PageCookery【不包括97版】):
header('Content-Type:application/javascript;charset=utf-8');
require_once("global.php");
if (!isset($_GET['mount'])){
    $_GET['mount']='10';
}
document.getElementById('pagecookery').innerHTML='< ?php
if(ereg("^[0-9]*$",$_GET['mount'])){
$sql='SELECT * FROM entry ORDER BY time DESC LIMIT '.$_GET['mount'];
$entry = $SQL->RunQuery($sql);
echo '
    '; while($item = $SQL-> FetchArray($entry)){ echo '
  • '; echo '' . get_username_by_id($item['userid']) . ''; echo ':'; echo hFormat::ParseBBCode( htmlspecialchars($item['content'],ENT_QUOTES)); echo '' . Format::Time($item['time']) . ''; echo '
  • '; } echo '
'; }else{ echo '这里没有你要的东西呢'; }
badge.php文件源代码(适合97版本以后的PageCookery【包括97版】):
  header('Content-Type:application/javascript;charset=utf-8');
  require_once("global.php");
  if (!isset($_GET['mount'])){
      $_GET['mount']='10';
  }
echo "document.getElementById('pagecookery').innerHTML='";
  if(ereg("^[0-9]*$",$_GET['mount'])){
    $sql='SELECT * FROM entry ORDER BY time DESC LIMIT '.$_GET['mount'];
    $entry = $db->query($sql)->result_array();
    echo '
    '; foreach($entry as $item){ echo '
  • '; echo '' . get_username_by_id($item['userid']) . ''; echo ':'; echo Format::ParseBBCode( htmlspecialchars($item['content'],ENT_QUOTES)); echo '' . Format::Time($item['time']) . ''; echo '
  • '; } echo '
'; }else{ echo '这里没有你要的东西呢'; } echo "';";
站外引用的代码|在"您的PageCookery地址+/widget.php"文件中有!
明眼人都看出来了吧,其实widget.php可有可无的,方便大家而已!

PageCookery转微饭程序

[1g1g]广岛之恋-莫文蔚#playID:2381[/]

某些人吵着要的转换程序,先放在这里了。将下列代码保存为convertpc2mf.php并放到你的PageCookery根目录下运行即可。



PageCookery转微饭程序 





请输入你的微饭数据库的自定义前缀:(不要忘了最后还有一个'_'哦!)

复制下列代码并在phpMyadmin中执行即可不懂请看图

友情提示:
1.请确定你是在'微饭'的表中执行代码,并确保微饭已经安装,即存在entry和reply两个表。
2.请输入你的'微饭'表前缀并确定后再复制代码,否则可能导致失败。
3.部分对数据库架构进行过变动的用户可能会导入失败,请修改相关代码后再进行导入。
4.导入前请将原数据库进行备份,以免发生意外损失。

Emlog碎语转换到PageCookery

[1g1g]1973-James Blunt#playID:-6797[/]

N久之前有某位同学给我发邮件让我帮忙写一个emlog碎语转PageCookery的数据库转换程序。虽然没有什么技术,但感觉这东西还是有些思路的,就接下来了。在卜卜口の君的帮助下,也算是有模有样的写出来了。并且拿了一个emlog的碎语数据库做过测试,因为他的内容多且杂,应该能代表广大群众的了。所以特地分享出来,希望能帮助一些同学。

将下列代码保存成covertopc.php,然后上传到emlog程序的根目录访问即可得到转换代码。本来想写成下载文件下载成SQL文件然后让用户自己导入的。我想直接代码也不还是PHPMYADMIN,于是就没多做操作了。虽然我做了测试,但不代表一定没有问题,欢迎使用中有问题的同学和我交流,最后说明问题的时候能发一份你的碎语数据库文件到我的邮箱里头。我的邮箱是i#imnerd.org



Emlog碎语转PageCookery程序 




?>

复制下列代码并在phpMyadmin中执行即可不懂请看图

友情提示:
1.请确定你是在PageCookery的表中执行代码,并确保PageCookery已经安装,即存在entry和reply两个表。
2.部分对数据库架构进行过变动的用户可能会导入失败,请修改相关代码后再进行导入。
3.导入前请将原数据库进行备份,以免发生意外损失。

PageCookery:为照片墙增加灯箱和透明效果

[music1g play=#315715]

不是很喜欢PageCookery默认的照片墙效果,很早之前用了@ideeland同学的方法换了一个透明效果,感觉还不错。这两天又想着搞一个LightBox(灯箱)效果,即点击小图片后可以用LightBox效果浏览大图片。预览效果请见:传送门

PageCookery里头Flickr照片墙是通过CURL函数获取最近上传的json数据来实现的,比较可以的是获取过来的json数据只有小图地址而没有大图地址。所以我就打算自己用Flickr API写过一个。经试验发现,这里需要使用flickr.people.getPublicPhotos和flickr.photos.getSizes两个API,前者获取最近上传照片的信息,后者则获取特定照片的全部尺寸地址。

将下列代码保存成photos.html替换掉template/photos.html

{template header}

    $key= ""; //输入你申请的key,请到"http://www.flickr.com/services/apps/create/noncommercial/?"这里申请你自己的非商用key $user_id = ""; //输入你的账户id,请到"http://www.flickr.com/services/api/explore/?method=flickr.photos.getRecent"这里查看你的id $per_page = ""; //输入你要显示的照片的数量 $data = file_get_contents("http://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=" . $key . "&user_id=" . $user_id . "&per_page=" . $per_page ); $object = simpleXML_load_string($data); $photo = $object -> photos -> photo; foreach ($photo as $each) { $photo_m = 'http://farm' . $each['farm'] . '.static.flickr.com/' . $each['server'] . '/' . $each['id'] . '_' . $each['secret'] . '_m.jpg'; $photo_b = 'http://farm' . $each['farm'] . '.static.flickr.com/' . $each['server'] . '/' . $each['id'] . '_' . $each['secret'] . '_b.jpg';
  • }
{template footer}

需要填写的东西我已经在代码里写好了,大家填写上就好了。可能美观上有些问题,大家再自己根据我这个修改一下自己的样式表就可以了。如有不懂的地方也可以留言,我会尽量帮忙的啦~
其实我自己的上面是把php语句function成了一个函数,然后再html模板中直接引用就好啦~嘿嘿,发现我最近真的很喜欢这样做,function_microblog.php里已经有好几个自定义函数了。嘿咻~!然后顺便想说的是更换了一个新的icon,没别的意思,就像让大家看一下,结束!

PS:搞完这个之后,我发现Flickr有最近更新的RSS订阅,XML里小图地址大图地址各种齐全,连API,USER_id什么的都不要,各种给力。于是我就这么的悲催了image

显示PC的最近消息模板

< ?php get_sidebar(); ?> < ?php get_footer(); ?>

然后在WP后台添加新页面,在高级选项的自定义模板中选择刚才上传的Microblog就可以了。

然后对于我这个模板您最后修改一下您的PageCookery的RSS输出样式。具体是将如下代码保存为rss_update.php并上传覆盖掉cron/rss_update.php文件。

< ?php
ob_start();

$entry = $SQL->RunQuery("SELECT * FROM entry ORDER BY time DESC LIMIT 0, 50");

$title = SITE_NAME . ' - RSS';

echo urldecode('%3C%3Fxml+version=%221.0%22+encoding=%22utf-8%22%3F%3E');
?>

< ?php echo $title; ?>
< ?php echo BASE_URL; ?>
Powered by PageCookery Microblog v< ?php echo $pcm_version; ?> Build < ?php echo $pcm_build; ?>
zh
< ?php while ($item = $SQL->FetchArray($entry)) { ?>

< ?php echo Format::Time($item['time'], 1); ?> 来自 < ?php echo $item['from']; ?>
< ?php echo BASE_URL; ?>?act=view&id=< ?php echo $item['id']; ?>
< ![CDATA[
< ?php $item['picture'] = $SQL->QueryRowsArray("SELECT * FROM picture WHERE entryid = " . $item['id']); ?>
< ?php if ($item['picture']['id']) { ?>

< ?php echo $item['picture']['filename']; ?>

< ?php } ?>]]> < ?php echo Format::Date($item['time'], 'D, j M Y H:i:s' , 0); ?> +0000 < ?php } ?> < ?php

$data = ob_get_contents();
ob_end_clean();

file_put_contents('rss.xml', $data);

最后附上我的样式表,复制下列代码到WP当前主题的style.css中即可。

.pagecookery_list {
list-style-type:disc;
font-size:14px;
color:#666666;
line-height:1.7;
font-family:Georgia,Times,"Times New Roman",serif;
}
.pagecookery_list li {
border-bottom:1px dashed #CCCCCC;
list-style-type:none;
padding:5px 0;
margin:0;
}
.pagecookery_list li:hover {
background:none repeat scroll 0 0 #E7E7E7;
}
.pagecookery_list li img {
width:100px;
}
.pagecookery_list a {
color:#999999;
}
.entry-meta {
background:url("http://storage.live.com/items/8AAEE749DE3922BE!558?filename=digu-time.png") no-repeat scroll 0 0 transparent;
padding:0 0 0 19px;
}
.entry-meta a {
border-bottom:none;
}
.entry-meta a:hover {
color:#FF6633;
}
#panel {
text-align:right;
}
#panel:hover {
background:none;
}
#panel a {
border:none;
padding:2px 5px;
}
#panel a:hover {
color:#FF6633;
background:none repeat scroll 0 0 #E7E7E7;
}
-->

论坛有人问能否做一个显示微博的单页面,之前我写过一个Typecho的,现在特地转到WP中来。

复制一下代码命名为microblog.php上传到你当前主题文件夹中

< ?php
/*
Template Name:Microblog
*/
?>
< ?php get_header(); ?>
< ?php get_sidebar(); ?> < ?php get_footer(); ?>

然后在WP后台添加新页面,在高级选项的自定义模板中选择刚才上传的Microblog就可以了。

然后对于我这个模板您最后修改一下您的PageCookery的RSS输出样式。具体是将如下代码保存为rss_update.php并上传覆盖掉cron/rss_update.php文件。

< ?php
ob_start();

$entry = $SQL->RunQuery("SELECT * FROM entry ORDER BY time DESC LIMIT 0, 50");

$title = SITE_NAME . ' - RSS';

echo urldecode('%3C%3Fxml+version=%221.0%22+encoding=%22utf-8%22%3F%3E');
?>

< ?php echo $title; ?>
< ?php echo BASE_URL; ?>
Powered by PageCookery Microblog v< ?php echo $pcm_version; ?> Build < ?php echo $pcm_build; ?>
zh
< ?php while ($item = $SQL->FetchArray($entry)) { ?>

< ?php echo Format::Time($item['time'], 1); ?> 来自 < ?php echo $item['from']; ?>
< ?php echo BASE_URL; ?>?act=view&id=< ?php echo $item['id']; ?>
< ![CDATA[
< ?php $item['picture'] = $SQL->QueryRowsArray("SELECT * FROM picture WHERE entryid = " . $item['id']); ?>
< ?php if ($item['picture']['id']) { ?>

< ?php echo $item['picture']['filename']; ?>

< ?php } ?>]]> < ?php echo Format::Date($item['time'], 'D, j M Y H:i:s' , 0); ?> +0000 < ?php } ?> < ?php

$data = ob_get_contents();
ob_end_clean();

file_put_contents('rss.xml', $data);

最后附上我的样式表,复制下列代码到WP当前主题的style.css中即可。

.pagecookery_list {
list-style-type:disc;
font-size:14px;
color:#666666;
line-height:1.7;
font-family:Georgia,Times,"Times New Roman",serif;
}
.pagecookery_list li {
border-bottom:1px dashed #CCCCCC;
list-style-type:none;
padding:5px 0;
margin:0;
}
.pagecookery_list li:hover {
background:none repeat scroll 0 0 #E7E7E7;
}
.pagecookery_list li img {
width:100px;
}
.pagecookery_list a {
color:#999999;
}
.entry-meta {
background:url("http://storage.live.com/items/8AAEE749DE3922BE!558?filename=digu-time.png") no-repeat scroll 0 0 transparent;
padding:0 0 0 19px;
}
.entry-meta a {
border-bottom:none;
}
.entry-meta a:hover {
color:#FF6633;
}
#panel {
text-align:right;
}
#panel:hover {
background:none;
}
#panel a {
border:none;
padding:2px 5px;
}
#panel a:hover {
color:#FF6633;
background:none repeat scroll 0 0 #E7E7E7;
}

为你的PageCookery添加富评论

友情提示:本文代码已经跟最最新版0.95做了相关的调整,并添加了检查评论网址是否带有http://的功能,欢迎广大新老用户再次测试。

曾几何时,我在PageCookery的讨论组上看到的最多的帖子就是如何让评论能支持昵称,邮箱和网址,跟WP一样。而后@孙老四同学就慷慨的分享了他的添加文件。经过我自己的摸索,我终于也成功的添加上了富评论,特此分享出我的添加过程。大家不要看代码比较多,其实要修改的只有几行,我怕大家找不到才把前后不变的代码也弄上来了。如果是在不愿意看的,可以直接下载文末我已经修改好的程序就行~

一、先要为数据库添加上相应的字段,这里定义记录网址和邮箱的字段名称为email和url,请记住他们的先后顺序以及名称。

image

1.打开reply表的结构页面

image

2.为reply表添加两个字段存放邮箱和地址

image

3.最后reply表结构如图所示

二、然后为网站加上输入框 打开template/blog.html,将100行p标签的内容改为如下内容{如果段数不一样的可以看代码前几行查找}

阅读全文

终极同步大法

随着微博的热门,已经有很多的微博程序纷纷出现了,而我们该如何挑选这些微博程序呢?首先我们要考虑的是选择单用户还是多用户的。但是如果像我这种注重功能的人,可能第一个想到的是它的同步功能如何?今天就介绍一种方法,为你的PageCookery的同步功能做拓展。

这里主要是利用了月光博客制作的GAE同步程序制作的一个针对PageCookery的简易教程。总所周知,Twitter现如今是微博界的老大,虽然被G.F.W了,但是仍然不能阻挡它的光芒!我们可以利用Twitter这个跳板,将其他地方的消息同步到Twitter中,同时也可以利用Twitter的多方式发布消息将自己的消息发布到Twitter中,然后将Twitter的消息同步到别的地方去!而月光的这个GAE程序就能够实现将Twitter的信息分发到各大微博网站去,包括新浪微博/嘀咕/网易微博/9911/51follow等等微博门户。而PageCookery微博程序又提供了对嘀咕的双向同步,而且也提供了RSS导入这么一个极佳的功能。

有人可能会说了,为什么我不直接用Twitter的RSS导入到PageCookery来呢?这是因为直接导入RSS的话,会有很多的RSS垃圾产生,比如你@别人的消息,以及RT别人的消息也都会同步过来,这个还算是小事,重要的是Twitter的RSS格式包括了用户名,所以每次导入Twitter的消息时都会带上"username:"这样的前缀,让人看起来甚是不爽,所以我们要对RSS进行过滤!而月光博客的GAE同步程序也正是做到了这一点。在此,要感谢月光博客为我们带来了这么好的一个工具。而且,利用GAE的高效工作性,我们基本能够实时的同步我们的消息到PageCookery中(我说的是几乎)……

好了,优点讲完了就改说怎么捣鼓了,首先呢,你要有申请一个GAE,如果有,则可跳过此不,如果没有,请参照如何申请GAE

申请好GAE并成功建立一个项目之后,我们要做的就是将月光博客的GAE程序给下载下来,下载方法,使用TortoiseSVN检出这个SVN地址,然后,编辑 app.yaml,修改为自己的appspot应用名,接着,修改twitter.py文件的最后一行,将自己的Twitter用户名填入,修改从 ret = send_sina_msgs("username","password",text) 语句开始的 username 和 password ,将相应微博客的用户名和密码分别填入,不需要同步的服务请使用#号注释掉,cron.yaml文件里是计划任务设置。至于如何使用TortoiseSVN下载,请参考:教你如何用SVN下载源码

千万不要忘记,记得修改最后一样你要同步的Twitter帐号!编辑保存后,我们就可以把程序上传到GAE主机上去了,至于如何上传么,请参考:如何上传文件到GAE image

好了,前半部分工作就做好了,下面我们就要做另外一部分工作了,现在假设你将Twitter上的信息同步到了嘀咕,由于PageCookery的嘀咕同步有个限制,就是嘀咕没有认证的API(也就是嘀咕页面消息显示是来自API)的消息PageCookery是不会同步过来的,所以我们只能通过RSS导入的法子,获取嘀咕微博的RSS地址,然后导入过来就可以了。(不能使用RSS导入功能的童鞋表示灰常抱歉了。)有人说了,如果我填写的是新浪微博的帐号怎么办?恩,我们知道新浪微博还没有开放RSS功能,不过这个也不要紧,http://imnerd.org/sinarss.php+"你的ID号"就是你的RSS地址了,这里要再次感谢月光博客提供的程序,有需要的也可以去他博客下载哦~~

其实个人认为吧,我们应该能从月光的GAE程序中直接获取到RSS地址的,那么就可以直接导入进PageCookery了,而不用使用其他微博做跳板了,只是python实在不是很了解,就没心思看他的代码了,希望有心人能够发现啊,呵呵~~最后就讲讲这个同步的时间问题,从Twitter同步到嘀咕等微博网站的时间是可以设置的,最短可以是1分钟(修改地方在cron.yaml文件最后一行的every * minutes,将*换成同步间隔时间即可),基本上可以做到实时同步,然后是嘀咕等RSS同步到PageCookery,经过我的初步观察,最迟15min~20min应该会同步过来的,如果没有同步过来的话我就告诉你一句:反正迟早的事,何必这么焦急呢,呵呵!

最后要提醒大家一句,请注意不要开启对某个微博的双向同步,一面发生消息同步死循环的状况……到时候估计删消息会删的你手软的!哈哈!