You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.1 KiB

<?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;
}