Je souhaite un pipeline pour envoyer les articles POST asynchrones à un service de stockage. J'ai l'idée d'utiliser quelque chose comme FilePipeline pour cela. FilePipeline vient avec beaucoup de frais généraux, car il suppose que je veux enregistrer des fichiers sur le disque, mais ici, je veux juste publier les fichiers dans une API de stockage. Cependant, il a une méthode qui donne des demandes: get_media_requests()
.Pipeline pour publier l'élément dans le service de stockage
Je reçois actuellement FileException
échec, et je ne sais pas comment éliminer le composant qui enregistre sur le disque. Y a-t-il un moyen de faire ce travail bien?
class StoragePipeline(FilePipeline):
access_token = os.environ['access_token']
def get_media_requests(self, item, info):
filename = item['filename']
headers = {
'Authorization': f'Bearer {self.access_token}',
'Dropbox-API-Arg': f'{{"path": "/{filename}"}}',
'Content-Type': 'application/octet-stream',
}
request = Request(
method='POST',
url='https://content.dropboxapi.com/2/files/upload',
headers=headers,
body=item['data'],
)
yield request
def item_completed(self, results, item, info):
return item
Vous pouvez jeter un oeil à [Scrapy Livre] (https://www.packtpub.com/ échantillons de big-data-and-business-intelligence/learning-scrapy), comme [ce pipeline d'Async ElasticSearch] (https://github.com/scalingexcellence/scrapybook/blob/5a6600abecb50e344b7aa6eaf03a181dbbbb08c0/ch09/properties/pipelines/ es.py). –