| 
									
										
										
										
											2024-04-25 18:47:39 +02:00
										 |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | """media.ccc.de""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import datetime | 
					
						
							|  |  |  | from urllib.parse import urlencode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from dateutil import parser | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | about = { | 
					
						
							|  |  |  |     'website': 'https://media.ccc.de', | 
					
						
							|  |  |  |     'official_api_documentation': 'https://github.com/voc/voctoweb', | 
					
						
							|  |  |  |     'use_official_api': True, | 
					
						
							|  |  |  |     'require_api_key': False, | 
					
						
							|  |  |  |     'results': 'JSON', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | categories = ['videos'] | 
					
						
							|  |  |  | paging = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | api_url = "https://api.media.ccc.de" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def request(query, params): | 
					
						
							|  |  |  |     args = {'q': query, 'page': params['pageno']} | 
					
						
							|  |  |  |     params['url'] = f"{api_url}/public/events/search?{urlencode(args)}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return params | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def response(resp): | 
					
						
							|  |  |  |     results = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for item in resp.json()['events']: | 
					
						
							|  |  |  |         publishedDate = None | 
					
						
							|  |  |  |         if item.get('date'): | 
					
						
							|  |  |  |             publishedDate = parser.parse(item['date']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         iframe_src = None | 
					
						
							| 
									
										
										
										
											2024-04-27 17:02:04 +02:00
										 |  |  |         for rec in item['recordings']: | 
					
						
							|  |  |  |             if rec['mime_type'].startswith('video'): | 
					
						
							|  |  |  |                 if not iframe_src: | 
					
						
							|  |  |  |                     iframe_src = rec['recording_url'] | 
					
						
							|  |  |  |                 elif rec['mime_type'] == 'video/mp4': | 
					
						
							|  |  |  |                     # prefer mp4 (minimal data rates) | 
					
						
							|  |  |  |                     iframe_src = rec['recording_url'] | 
					
						
							| 
									
										
										
										
											2024-04-25 18:47:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         results.append( | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 'template': 'videos.html', | 
					
						
							|  |  |  |                 'url': item['frontend_link'], | 
					
						
							|  |  |  |                 'title': item['title'], | 
					
						
							|  |  |  |                 'content': item['description'], | 
					
						
							|  |  |  |                 'thumbnail': item['thumb_url'], | 
					
						
							|  |  |  |                 'publishedDate': publishedDate, | 
					
						
							|  |  |  |                 'length': datetime.timedelta(seconds=item['length']), | 
					
						
							|  |  |  |                 'iframe_src': iframe_src, | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return results |