<?php
|
|
namespace feeds;
|
|
use BarnabyWalters\Mf2;
|
|
|
|
function parse_mf2(&$html, $base) {
|
|
$parser = new \mf2\Parser($html, $base);
|
|
return $parser->parse();
|
|
}
|
|
|
|
function get_rels(&$data) {
|
|
if($data && array_key_exists('rels', $data)) {
|
|
return $data['rels'];
|
|
} else {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
function get_alternates(&$data) {
|
|
if($data && array_key_exists('alternates', $data)) {
|
|
return $data['alternates'];
|
|
} else {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
// Compares name, summary and content values to determine if they are equal
|
|
function content_is_equal($a, $b) {
|
|
// remove html tags
|
|
$a = strip_tags($a);
|
|
$b = strip_tags($b);
|
|
// remove encoded entities
|
|
$a = preg_replace('/&#?[a-z0-9]{2,8};/i', '', $a);
|
|
$b = preg_replace('/&#?[a-z0-9]{2,8};/i', '', $b);
|
|
// remove all non-alphanumeric chars
|
|
$a = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($a));
|
|
$b = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($b));
|
|
return $a == $b;
|
|
}
|
|
|
|
// Given a parsed microformat data structure, find the feed on the page.
|
|
// This is meant to follow
|
|
// * http://indiewebcamp.com/feed#How_To_Consume
|
|
// * http://microformats.org/wiki/h-feed#Parsing
|
|
// Returns an array:
|
|
// [
|
|
// 'properties' => [ list of mf2 properties of the h-feed ],
|
|
// 'entries' => [ list of h-entry items of the feed ]
|
|
// ]
|
|
function find_feed_info(&$data) {
|
|
|
|
// tantek.com : h-card => h-feed => h-entry
|
|
// snarfed.org : h-feed => h-entry
|
|
// aaronparecki.com : h-entry
|
|
|
|
$properties = [];
|
|
$entries = [];
|
|
|
|
// Find the first h-feed
|
|
$feeds = Mf2\findMicroformatsByType($data, 'h-feed');
|
|
if(count($feeds)) {
|
|
$feed = $feeds[0];
|
|
|
|
$properties = $feed['properties'];
|
|
$entries = Mf2\findMicroformatsByType($feed['children'], 'h-entry', false);
|
|
|
|
return [
|
|
'properties' => $properties,
|
|
'entries' => $entries
|
|
];
|
|
|
|
} else {
|
|
// This is an implied feed if there are h-entry posts found at the top level
|
|
|
|
$entries = Mf2\findMicroformatsByType($data['items'], 'h-entry', false);
|
|
|
|
if(count($entries)) {
|
|
return [
|
|
'properties' => [],
|
|
'entries' => $entries
|
|
];
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
}
|