rss feed added

This commit is contained in:
HolgerHatGarKeineNode
2023-02-15 21:19:13 +01:00
parent 28647e72d8
commit e4eab97a8f
6 changed files with 140 additions and 3 deletions

View File

@@ -54,6 +54,7 @@ class LibraryItem extends Model implements HasMedia, Sortable, Feedable
])
->where('news', true)
->where('approved', true)
->orderByDesc('created_at')
->get();
}

View File

@@ -32,12 +32,12 @@ return [
/*
* The format of the feed. Acceptable values are 'rss', 'atom', or 'json'.
*/
'format' => 'atom',
'format' => 'rss',
/*
* The view that will render the feed.
*/
'view' => 'feed::atom',
'view' => 'feed::rss',
/*
* The mime type to be used in the <link> tag. Set to an empty string to automatically

View File

@@ -0,0 +1,48 @@
<?=
/* Using an echo tag here so the `<? ... ?>` won't get parsed as short tags */
'<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL
?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="{{ $meta['language'] }}">
@foreach($meta as $key => $metaItem)
@if($key === 'link')
<{{ $key }} href="{{ url($metaItem) }}" rel="self"></{{ $key }}>
@elseif($key === 'title')
<{{ $key }}>{!! \Spatie\Feed\Helpers\Cdata::out($metaItem) !!}</{{ $key }}>
@elseif($key === 'description')
<subtitle>{{ $metaItem }}</subtitle>
@elseif($key === 'language')
@elseif($key === 'image')
@if(!empty($metaItem))
<logo>{!! $metaItem !!}</logo>
@else
@endif
@else
<{{ $key }}>{{ $metaItem }}</{{ $key }}>
@endif
@endforeach
@foreach($items as $item)
<entry>
<title>{!! \Spatie\Feed\Helpers\Cdata::out($item->title) !!}</title>
<link rel="alternate" href="{{ url($item->link) }}" />
<id>{{ url($item->id) }}</id>
<author>
<name>{!! \Spatie\Feed\Helpers\Cdata::out($item->authorName) !!}</name>
@if(!empty($item->authorEmail))
<email>{!! \Spatie\Feed\Helpers\Cdata::out($item->authorEmail) !!}</email>
@endif
</author>
<summary type="html">
{!! \Spatie\Feed\Helpers\Cdata::out($item->summary) !!}
</summary>
@if($item->__isset('enclosure'))
<link href="{{ url($item->enclosure) }}" length="{{ $item->enclosureLength }}" type="{{ $item->enclosureType }}" />
@endif
@foreach($item->category as $category)
<category term="{{ $category }}" />
@endforeach
<updated>{{ $item->timestamp() }}</updated>
</entry>
@endforeach
</feed>

View File

@@ -0,0 +1,46 @@
{
"version": "https://jsonfeed.org/version/1.1",
"title": "{{ $meta['title'] }}",
@if(!empty($meta['description']))
"description": "{{ $meta['description'] }}",
@endif
"home_page_url": "{{ config('app.url') }}",
"feed_url": "{{ url($meta['link']) }}",
"language": "{{ $meta['language'] }}",
@if(!empty($meta['image']))
"icon": "{{ $meta['image'] }}",
@endif
"authors": [@foreach($items->unique('authorName') as $item){
"name": "{{ $item->authorName }}"
}@if(! $loop->last),@endif
@endforeach
],
"items": [@foreach($items as $item){
"id": "{{ url($item->id) }}",
"title": {!! json_encode($item->title) !!},
"url": "{{ url($item->link) }}",
"content_html": {!! json_encode($item->summary) !!},
"summary": {!! json_encode($item->summary) !!},
"date_published": "{{ $item->timestamp() }}",
"date_modified": "{{ $item->timestamp() }}",
"authors": [{ "name": {!! json_encode($item->authorName) !!} }],
@if($item->__isset('image'))
"image": "{{ url($item->image) }}",
@endif
@if($item->__isset('enclosure'))
"attachments": [
{
"url": "{{ url($item->enclosure) }}",
"mime_type": "{{ $item->enclosureType }}",
"size_in_bytes": {{ $item->enclosureLength }}
}
],
@endif
"tags": [ {!! implode(',', array_map(fn($c) => '"'.$c.'"', $item->category)) !!} ]
}@if(! $loop->last),
@endif
@endforeach
]
}

View File

@@ -0,0 +1,3 @@
@foreach($feeds as $name => $feed)
<link rel="alternate" type="{{ \Spatie\Feed\Helpers\FeedContentType::forLink($feed['format'] ?? 'atom') }}" href="{{ route("feeds.{$name}") }}" title="{{ $feed['title'] }}">
@endforeach

View File

@@ -0,0 +1,39 @@
<?=
/* Using an echo tag here so the `<? ... ?>` won't get parsed as short tags */
'<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL
?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<atom:link href="{{ url($meta['link']) }}" rel="self" type="application/rss+xml"/>
<title>{!! \Spatie\Feed\Helpers\Cdata::out($meta['title'] ) !!}</title>
<link>{!! \Spatie\Feed\Helpers\Cdata::out(url($meta['link']) ) !!}</link>
@if(!empty($meta['image']))
<image>
<url>{{ $meta['image'] }}</url>
<title>{!! \Spatie\Feed\Helpers\Cdata::out($meta['title'] ) !!}</title>
<link>{!! \Spatie\Feed\Helpers\Cdata::out(url($meta['link']) ) !!}</link>
</image>
@endif
<description>{!! \Spatie\Feed\Helpers\Cdata::out($meta['description'] ) !!}</description>
<language>{{ $meta['language'] }}</language>
<pubDate>{{ $meta['updated'] }}</pubDate>
@foreach($items as $item)
<item>
<title>{!! \Spatie\Feed\Helpers\Cdata::out($item->title) !!}</title>
<link>{{ url($item->link) }}</link>
<description>{!! \Spatie\Feed\Helpers\Cdata::out($item->summary) !!}</description>
<author>{!! \Spatie\Feed\Helpers\Cdata::out($item->authorName.(empty($item->authorEmail)?'':' <'.$item->authorEmail.'>')) !!}</author>
<guid isPermaLink="true">{{ url($item->id) }}</guid>
<pubDate>{{ $item->timestamp() }}</pubDate>
@if($item->__isset('enclosure'))
<enclosure url="{{ url($item->enclosure) }}" length="{{ url($item->enclosureLength) }}" type="{{ $item->enclosureType }}"/>
<media:content url="{{ url($item->enclosure) }}" medium="image" type="{{ $item->enclosureType }}"/>
@endif
@foreach($item->category as $category)
<category>{{ $category }}</category>
@endforeach
</item>
@endforeach
</channel>
</rss>