PHP微信开发之查询微信精选文章


Posted in PHP onJune 23, 2016

查询微信里的一些精选的,点击量比较大的文章。 
别忘记申请apikey(登录百度账号即可获取),要完成的功能是:

1、用户回复"文章",公众号要返回文章分类的编号(比如9、科技)。

2、用户回复wz9,1,腾讯     则能返回科技类文章中,关键词为“腾讯”的文章,并且显示第一页(wz9,2,腾讯则可以返回第二页,每一页返回的文章数量可以自定义,此处我放回7篇)。

详细步骤:

1、回复“文章”,返回所有文章分类的id。下面的代码是responseMsg方法里的一部分,觉得看得不明白的或者第一次接触微信开发的,可以参考我的文章:https://3water.com/article/87252.htm 

if(!empty($postStr)){
    
   //解析post来的XML为一个对象$postObj
   $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  
   $fromUsername = $postObj->FromUserName; //请求消息的用户
   $toUsername = $postObj->ToUserName; //"我"的公众号id
   $keyword = trim($postObj->Content); //用户发送的消息内容
   $time = time(); //时间戳
   $msgtype = 'text'; //消息类型:文本
   $textTpl = "<xml>
      <ToUserName><![CDATA[%s]]></ToUserName>
      <FromUserName><![CDATA[%s]]></FromUserName>
      <CreateTime>%s</CreateTime>
      <MsgType><![CDATA[%s]]></MsgType>
      <Content><![CDATA[%s]]></Content>
      </xml>";

$which = mb_substr($keyword, 0, 2, 'UTF-8'); 

elseif($which == "文章"){
    $ch = curl_init();
    $url = 'http://apis.baidu.com/showapi_open_bus/weixin/weixin_article_type';
    $header = array('apikey: 你自己的apikey');

    // 添加apikey到header
    curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // 执行HTTP请求
    curl_setopt($ch , CURLOPT_URL , $url);
    $res = curl_exec($ch);
    $res = json_decode($res, true); //获取文章分类name和id

    foreach($res['showapi_res_body']['typeList'] as $v){
     $article[] = $v['id'] . "、" . $v['name'];
    }
    sort($article, SORT_NUMERIC);
    foreach($article as $v){
     $contentStr .= $v . "\n";
    }
    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
    echo $resultStr;
    exit();


   }

 2、此时echo的$resultStr就是所有文章的分类了。用户根据分类的id,可以选择自己喜欢的分类查看文章,比如回复wz19,1,篮球可以查看分类为体育的关于篮球的文章。
 具体的调用接口和实现功能的代码如下:

elseif($which == "wz"){
    list($art_id, $page_id, $keyname) = split(',', $keyword);
    $art_id = str_replace('wz', '', $art_id);

    $ch = curl_init();
    $url = 'http://apis.baidu.com/showapi_open_bus/weixin/weixin_article_list?typeId=' . $art_id . '&page=' . $page_id . '&key=' . urlencode($keyname);

    $header = array('apikey: 你自己的apikey');

    // 添加apikey到header
    curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // 执行HTTP请求
    curl_setopt($ch , CURLOPT_URL , $url);
    $res = curl_exec($ch);
    $res = json_decode($res, true);

    foreach($res['showapi_res_body']['pagebean']['contentlist'] as $k=>$v){
     if($k <= 6){
      $arts[] = $v;
     }else{
      break;
     }
    }

    $items = "";
    foreach($arts as $v){
     $items .= "<item>
    <Title><![CDATA[" . $v['title'] . "]]></Title> 
    <Description><![CDATA[" . $v['title'] . "]]></Description>
    <PicUrl><![CDATA[" . $v["contentImg"] . "]]></PicUrl>
    <Url><![CDATA[" . $v['url'] . "]]></Url>
    </item>";
    }



    $textTpl = "<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[news]]></MsgType>
    <ArticleCount>7</ArticleCount>
    <Articles>" . $items . "
    </Articles>
    </xml> ";

    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time);
    echo $resultStr;
    exit();


   }

别忘了$header = array('apikey: ');的时候填写自己的apikey,否则接口会拒绝返回你的请求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
用PHP实现文件上传二法
Oct 09 PHP
刚才在简化php的库,结果发现很多东西
Dec 31 PHP
深思 PHP 数组遍历的差异(array_diff 的实现)
Mar 23 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
PHP5多态性与动态绑定介绍
Apr 03 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
php图形jpgraph操作实例分析
Feb 22 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
php7下的filesize函数
Sep 30 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 PHP
PHP微信开发之查询城市天气
Jun 23 #PHP
PHP微信开发之有道翻译
Jun 23 #PHP
PHP微信开发之文本自动回复
Jun 23 #PHP
php微信高级接口群发 多客服
Jun 23 #PHP
php英文单词统计器
Jun 23 #PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 #PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 #PHP
You might like
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
python中input()与raw_input()的区别分析
2016/02/27 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
给民警的表扬信
2014/01/08 职场文书
法律进社区实施方案
2014/03/21 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
法律进社区活动总结
2015/05/07 职场文书
硕士学位申请报告
2015/05/15 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫
宝塔更新Python及Flask项目的部署
2022/04/11 Python