| 
									
										
										
										
											2023-10-05 17:37:59 +02:00
										 |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | """BPB refers to ``Bundeszentrale für poltische Bildung``, which is a German
 | 
					
						
							|  |  |  | governmental institution aiming to reduce misinformation by providing resources | 
					
						
							|  |  |  | about politics and history. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from datetime import datetime | 
					
						
							|  |  |  | from urllib.parse import urlencode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | about = { | 
					
						
							|  |  |  |     'website': "https://www.bpb.de", | 
					
						
							|  |  |  |     'official_api_documentation': None, | 
					
						
							|  |  |  |     'use_official_api': False, | 
					
						
							|  |  |  |     'require_api_key': False, | 
					
						
							|  |  |  |     'results': 'JSON', | 
					
						
							|  |  |  |     'language': 'de', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | paging = True | 
					
						
							|  |  |  | categories = ['general'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | base_url = "https://www.bpb.de" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def request(query, params): | 
					
						
							|  |  |  |     args = { | 
					
						
							|  |  |  |         'query[term]': query, | 
					
						
							|  |  |  |         'page': params['pageno'] - 1, | 
					
						
							|  |  |  |         'sort[direction]': 'descending', | 
					
						
							|  |  |  |         'payload[nid]': 65350, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     params['url'] = f"{base_url}/bpbapi/filter/search?{urlencode(args)}" | 
					
						
							|  |  |  |     return params | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def response(resp): | 
					
						
							|  |  |  |     results = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     json_resp = resp.json() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for result in json_resp['teaser']: | 
					
						
							| 
									
										
										
										
											2024-05-12 17:52:52 +02:00
										 |  |  |         thumbnail = None | 
					
						
							| 
									
										
										
										
											2023-10-05 17:37:59 +02:00
										 |  |  |         if result['teaser']['image']: | 
					
						
							| 
									
										
										
										
											2024-05-12 17:52:52 +02:00
										 |  |  |             thumbnail = base_url + result['teaser']['image']['sources'][-1]['url'] | 
					
						
							| 
									
										
										
										
											2023-10-05 17:37:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         metadata = result['extension']['overline'] | 
					
						
							|  |  |  |         authors = ', '.join(author['name'] for author in result['extension'].get('authors', [])) | 
					
						
							|  |  |  |         if authors: | 
					
						
							|  |  |  |             metadata += f" | {authors}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         publishedDate = None | 
					
						
							|  |  |  |         if result['extension'].get('publishingDate'): | 
					
						
							| 
									
										
										
										
											2025-02-05 14:35:02 +01:00
										 |  |  |             publishedDate = datetime.fromtimestamp(result['extension']['publishingDate']) | 
					
						
							| 
									
										
										
										
											2023-10-05 17:37:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         results.append( | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 'url': base_url + result['teaser']['link']['url'], | 
					
						
							|  |  |  |                 'title': result['teaser']['title'], | 
					
						
							|  |  |  |                 'content': result['teaser']['text'], | 
					
						
							| 
									
										
										
										
											2024-05-12 17:52:52 +02:00
										 |  |  |                 'thumbnail': thumbnail, | 
					
						
							| 
									
										
										
										
											2023-10-05 17:37:59 +02:00
										 |  |  |                 'publishedDate': publishedDate, | 
					
						
							|  |  |  |                 'metadata': metadata, | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return results |