Feature: Add UA and referer to fetch pictures from more sites

This commit is contained in:
winkidney
2018-08-21 20:06:46 +08:00
parent b7135b64aa
commit 5ed61913a1
2 changed files with 15 additions and 3 deletions

View File

@@ -103,7 +103,10 @@ class PinResource(ModelResource):
def hydrate_image(self, bundle): def hydrate_image(self, bundle):
url = bundle.data.get('url', None) url = bundle.data.get('url', None)
if url: if url:
image = Image.objects.create_for_url(url) image = Image.objects.create_for_url(
url,
referer=bundle.data.get('referer', None),
)
bundle.data['image'] = '/api/v1/image/{}/'.format(image.pk) bundle.data['image'] = '/api/v1/image/{}/'.format(image.pk)
return bundle return bundle

View File

@@ -14,11 +14,20 @@ from users.models import User
class ImageManager(models.Manager): class ImageManager(models.Manager):
_default_ua = {
'User-Agent': 'Mozilla/5.0 (Windows NT 5.1) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/48.0.2564.82 Safari/537.36',
}
# FIXME: Move this into an asynchronous task # FIXME: Move this into an asynchronous task
def create_for_url(self, url): def create_for_url(self, url, referer=None):
file_name = url.split("/")[-1].split('#')[0].split('?')[0] file_name = url.split("/")[-1].split('#')[0].split('?')[0]
buf = BytesIO() buf = BytesIO()
response = requests.get(url) headers = dict(self._default_ua)
if referer is not None:
headers["Referer"] = referer
response = requests.get(url, headers=headers)
buf.write(response.content) buf.write(response.content)
obj = InMemoryUploadedFile(buf, 'image', file_name, obj = InMemoryUploadedFile(buf, 'image', file_name,
None, buf.tell(), None) None, buf.tell(), None)