卖坚果的怪叔叔 卖坚果的怪叔叔
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
首页 › 技术 › 如何获取微信文章封面和文章标题!

如何获取微信文章封面和文章标题!

坚果大叔
2020-04-17 19:54:43技术阅读 3,110

小程序需要一个获取微信文章封面和标题的功能,然后网上找了一圈,找到了下面这个代码,但是已经不能使用了,获取不到微信的标题,自己改动之后分享给有需要的人。

项目原作者git

{

    title: '【福利】免费领取一个月腾讯视频会员' // 标题
    digest: "【福利】免费领取一个月腾讯视频会员",   // 描述
    content_url: "",    // 内容天
    cover: "",  // 封面
    wechatname: "故事胶片",   // 名称
}

/**
* 微信公众号文章爬取类
* 使用方法:
* $crawler = new WxCrawler();
* $content = $crawler->crawByUrl($url);
*/

代理

/** @var 代理  */
protected $agent = [
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
];
public $host = '';
public $header = '';
public $referer = '';
public $antiLeech = '';

初始化curl信息

/** @var 初始化curl信息  */
$this->header  = $this->agent[rand(0,count($this->agent) - 1)];
$this->referer = empty($referer)?'http://weixin.sogou.com/' : $referer;
$this->host    = empty($host)?'weixin.sogou.com' : $host;
/** @var 处理微信图片的防盗链 */
$this->antiLeech = 'http://'.$_SERVER['SERVER_NAME'].'/tool.php?url=';

爬取内容

/**
 * 爬取内容
 * @author bignerd
 * @since  2016-08-16T10:13:58+0800
 * @param  $url
 */

$ch=curl_init($url);
$options = [
    CURLOPT_USERAGENT => $this->agent,
    CURLOPT_REFERER => $this->referer,
];
curl_setopt_array($ch,$options);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,60);

$output=curl_exec($ch);

return $output;

$content = $this->_get($url);
$basicInfo = $this->articleBasicInfo($content);
list($content_html, $content_text) = $this->contentHandle($content);
return array_merge($basicInfo,['content_html' => $content_html,'content_text' => $content_text]);

处理微信文章源码,提取文章主体,处理图片链接

/**
 * 处理微信文章源码,提取文章主体,处理图片链接
 * @author bignerd
 * @since  2016-08-16T15:59:27+0800
 * @param  $content 抓取的微信文章源码
 * @return [带图html文本,无图html文本]
 */
public function contentHandle($content)
{
    $content_html_pattern = '/<div class="rich_media_content " id="js_content">(.*?)<\/div>/s';
    preg_match_all($content_html_pattern, $content, $html_matchs);
    $content_html = $html_matchs[0][0];
    /** @var  带图片html文本 */
    $content_html = preg_replace_callback('/data-src="(.*?)"/', function($matches){
        return 'src='.$this->antiLeech.urlencode($matches[1]);
    }, $content_html);
    /** @var  无图html文本 */
    $content_text = preg_replace('/<img.*?>/s','',$content_html);

    return [$content_html,$content_text];
}

获取文章的基本信息

/**
 * 获取文章的基本信息
 * @author bignerd
 * @since  2016-08-16T17:16:32+0800
 * @param  $content 文章详情源码
 * @return $basicInfo
 */
//待获取item                
$item = [
    'ct' => 'date',//发布时间
    'msg_title' => 'title',//描述
    'msg_desc' => 'digest',//描述
    'msg_link' => 'content_url',//文章链接
    'msg_cdn_url' => 'cover',//封面图片链接
    'nickname' => 'wechatname',//公众号名称
];
$basicInfo = [
    'author' => '',
    'copyright_stat' => '',
];
foreach ($item as $k => $v) {
    if ($k == 'msg_title') {
        $pattern = '/ var '.$k." = '(.*?)'/s";
    } else {
        $pattern = '/ var '.$k.' = "(.*?)";/s';
    }
    preg_match_all($pattern,$content,$matches);
    if(array_key_exists(1, $matches) && !empty($matches[1][0])){
        $basicInfo[$v] = $this->htmlTransform($matches[1][0]);
    } else {
        $basicInfo[$v] = '';
    }
}
/** 获取作者 */
preg_match('/<em class="rich_media_meta rich_media_meta_text">(.*?)<\/em>/s', $content, $matchAuthor);
if(!empty($matchAuthor[1])) $basicInfo['author'] = $matchAuthor[1];
/** 文章类型 */
preg_match('/<span id="copyright_logo" class="rich_media_meta meta_original_tag">(.*?)<\/span>/s', $content, $matchType);
if(!empty($matchType[1])) $basicInfo['copyright_stat'] = $matchType[1];

return $basicInfo;

特殊字符转换

/**
* 特殊字符转换
* @author bignerd
* @since  2016-08-16T17:30:52+0800
* @param  $string
* @return $string
*/
$string = str_replace('"','"',$string);
$string = str_replace('&','&',$string);
$string = str_replace('amp;','',$string);
$string = str_replace('<','<',$string);
$string = str_replace('>','>',$string);
$string = str_replace(' ',' ',$string);
$string = str_replace("\\", '',$string);
return $string;

github

体验看这里

如何获取微信文章封面和文章标题!-卖坚果的怪叔叔

微信 微信封面
赞赏 赞(0)
本文系作者 @坚果大叔 原创发布在 卖坚果的怪叔叔。未经许可,禁止转载。
清明小假期!
上一篇
小白进阶,带你玩转Github~
下一篇
在小程序中查看

这是个😊,挣点服务器费用😜

热门文章
高处,不一样的风景
镜头下的一点记录!
简单!三步实现微信消息同步!!
npm install 出现 Error:EISDIR:illegal operation on a directory 的错误提示!
老家的桃树和梨树
🐑了后的一些记录!
专题标签
agent (1) CSS (15) dom (1) Es6入门系列 (14) Git (3) html (1) iview (1) JavaScript (9) js (4) Lif (1) Node (4) pyecharts (1) Python (10) ref (1) scriptable (1) Skill (1) vsCode (1) vue (4) wordpress (2) 三月 (1) 上海 (1) 假期 (1) 其他分享 (3) 前端两三问 (15) 古镇 (1) 外滩 (1) 对象 (1) 小程序 (5) 年度总结 (6) 年终总结 (1) 微信机器人 (4) 打字机 (1) 技术 (1) 日常问题 (8) 日常问题记录 (1) 春天 (2) 服务器 (2) 海族馆 (1) 生活 (8) 网上国网 (1) 记录 (3) 通勤 (1) 重学JavaScript (11) 面试题 (10) 🌸 (1)
什么是Agent?
2026-08-15 23:49:12
405 0 2
什么是 Skill?
2026-08-12 21:32:42
322 1 0
失业在家,我给小朋友做了一个练字小程序!
2026-08-07 16:21:52
601 10 1
上线8年,15万用户的小程序,一共赚了多少钱?
2026-05-30 18:01:24
4,647 4 0
  • 0
博主

一位佛系的前端开发者,略通摄影,乐于尝试新事物,热衷于美食。

友链
故事胶片
公众号
坚果大叔 执行上下文 卖坚果的怪叔叔 Dacking
Copyright © 2017-2026 卖坚果的怪叔叔

开往-友链接力

萌ICP备20230818号

苏ICP备18048410号-3
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
# CSS # # JavaScript # # vue # # 微信 # # 生活 #
坚果大叔
345
文章
171
评论
432
喜欢