我想要在小程序中展示我首页中的聚合内容,但是原来的聚合内容采用的是 HTML 形式进行缓存的,所以说我要把这个格式改成 JSON,这样才可以保证多端的共用性。
聚合里面原来的文章缓存功能还存在着一个没解决的问题,由于 XML 标签 <content:encoded>
里面含有 :
,就导致 PHP 的解析程序跳过了这个标签,无法通过文章内容提取里面的图片。
我想到了一招,就是先把 content:encoded
批量替换成 content
,简单粗暴,再通过函数 simplexml_load_string
进行解析,就解决这个问题了。
$file = file_get_contents("https://paugram.com/feed");
$file = str_replace("content:encoded", "content", $file);
$file = simplexml_load_string($file, 'SimpleXMLElement', LIBXML_NOCDATA) -> channel -> item;
第二个问题是,这个函数返回的形式比较特殊,是个 Object 类型。如果直接打印结果,得到的是第一条,可通过索引值遍历,却可以得到里面的 1-4 条,为什么呢?而且获取里面的内容,却一样是数组形式,例如原有的 title 应该是 String
,他却变成了 [0] => "标题"
这样的奇葩结构。而且这种类似 Array 的结构,却可以直接 echo
输出,而一般的 Array 都是直接报错无法输出的啊!
看到这种问题我一般会直接选择 Object 转 Array,变成 Array 不就正常进行遍历了么。
$result = "";
$file = file_get_contents("https://paugram.com/feed");
$file = str_replace("content:encoded", "content", $file);
$file = simplexml_load_string($file, 'SimpleXMLElement', LIBXML_NOCDATA) -> channel -> item;
// 用于缓存的 JSON 数据
$json = array();
for($i = 0; $i < 4; $i++){
if(isset($file[$i])){
// 这里必须转数组,不然插入进去的就是 [0] => "" 这样的了
$iii = (array)$file[$i];
array_push($json, array(
"title" => $iii["title"],
"link" => $iii["link"]
));
// 用于输出 HTML
$result .= self::getTemplate($iii["title"], $img, $iii["link"]);
}
else{
break;
}
}
这种奇葩问题“暂时”解决之后,终于可以搞定数据接口了!于是小程序的主页也很快搞了出来,可是这种「网页链接」是不能在微信小程序跳转出去的吧?我看了下下面的逼站视频链接,小程序之间跳转小程序,是只能绑定在同一个公众号下的才行,不允许跳别人家的小程序来实现播放的操作!那可咋办哦?复制到剪贴板然后再用浏览器打开?