1<?php 2 3/** 4 * JSONCreator is a FeedCreator that implements the JSON Feed specification, 5 * as in https://jsonfeed.org/version/1.1 6 * 7 * @author Andreas Gohr <andi@splitbrain.org> 8 */ 9class JSONCreator extends FeedCreator 10{ 11 /** @inheritdoc */ 12 public function createFeed() 13 { 14 $data = array(); 15 16 $data['version'] = 'https://jsonfeed.org/version/1.1'; 17 $data['title'] = (string)$this->title; 18 $data['home_page_url'] = (string)$this->link; 19 $data['feed_url'] = (string)$this->syndicationURL; 20 $data['description'] = (string)$this->description; 21 $data['user_comment'] = 'Created by ' . FEEDCREATOR_VERSION; 22 if ($this->image != null) { 23 $data['icon'] = $this->image->url; 24 } 25 if ($this->language != '') { 26 $data['language'] = $this->language; 27 } 28 29 $data['items'] = array(); 30 foreach ($this->items as $item) { 31 $entry = array(); 32 $entry['id'] = $item->guid ? (string)$item->guid : (string)$item->link; 33 $entry['url'] = (string)$item->link; 34 if ($item->source) { 35 $entry['external_url'] = (string)$item->source; 36 } 37 $entry['title'] = strip_tags((string)$item->title); 38 $entry['content_text'] = strip_tags((string)$item->description); 39 $entry['content_html'] = (string)$item->description; 40 $entry['date_published'] = (new FeedDate($item->date))->iso8601(); 41 if ($item->author) { 42 // We only support one author, JSONFeed 1.1 accepts multiple 43 $entry['authors'] = array(array('name' => (string)$item->author)); 44 // 1.0 only supported one, for compatibility we set it as well 45 $entry['author'] = array('name' => (string)$item->author); 46 } 47 if ($item->category) { 48 $entry['tags'] = (array)$item->category; 49 } 50 if ($item->enclosure) { 51 // We only support one enclosure, JSONFeed 1.1 accepts multiple 52 $entry['attachments'] = array( 53 array( 54 'url' => $item->enclosure['url'], 55 'mime_type' => $item->enclosure['type'], 56 'size_in_bytes' => $item->enclosure['length'] 57 ) 58 ); 59 } 60 61 $data['items'][] = $entry; 62 } 63 64 return json_encode($data); 65 } 66} 67