前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何获取微信文章封面和文章标题!

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

作者头像
执行上下文
发布2022-07-26 14:52:17
9170
发布2022-07-26 14:52:17
举报
文章被收录于专栏:执行上下文执行上下文

前提

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

注意:本项目基于 bigbignerd 的项目改进

数据结构

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

使用方法

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

主要代码

代理

代码语言:javascript
复制
/** @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信息

代码语言:javascript
复制
/** @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=';

爬取内容

代码语言:javascript
复制
/**
 * 爬取内容
 * @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]);

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

代码语言:javascript
复制
/**
 * 处理微信文章源码,提取文章主体,处理图片链接
 * @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];
}

获取文章的基本信息

代码语言:javascript
复制
/**
 * 获取文章的基本信息
 * @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;

特殊字符转换

代码语言:javascript
复制
/**
* 特殊字符转换
* @author bignerd
* @since  2016-08-16T17:30:52+0800
* @param  $string
* @return $string
*/
$string = str_replace('&quot;','"',$string);
$string = str_replace('&amp;','&',$string);
$string = str_replace('amp;','',$string);
$string = str_replace('&lt;','<',$string);
$string = str_replace('&gt;','>',$string);
$string = str_replace('&nbsp;',' ',$string);
$string = str_replace("\\", '',$string);
return $string;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 执行上下文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提
  • 数据结构
  • 使用方法
  • 主要代码
    • 代理
      • 初始化curl信息
        • 爬取内容
          • 处理微信文章源码,提取文章主体,处理图片链接
            • 获取文章的基本信息
              • 特殊字符转换
              相关产品与服务
              云开发 CloudBase
              云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档