예제 #1
0
 def _create_photos_from_xml_response(self, xml_response):
     problem_children = []
     counter = 1
     for elem in xml_response:
         print counter
         counter += 1
         if elem.tag == "docs":
             if not self._resource_already_exists(elem):
                 if elem.find("identifier") is not None:
                     new_photo = CatPhoto(
                         title=elem.find("title").text,
                         description=elem.find("title_sort").text,
                         source=Source.objects.get(description=elem.find('institution').text),
                         source_key=elem.find("identifier").text,
                         author=elem.find("author").text,
                         source_url=elem.find("record_link").text,
                     )
                     if elem.find("era_facet") is not None:
                         new_photo.date_text = elem.find("era_facet").text
                     opener = urllib2.build_opener()
                     opener.addheaders = [("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36")]
                     img_response = opener.open(elem.find("image_links").text)
                     new_photo.image.save("finna.jpg", ContentFile(img_response.read()))
                     new_photo.save()
                     self.album.photos.add(new_photo)
                 else:
                     problem_children.append(elem.find("title").text)
     print problem_children
예제 #2
0
 def handle(self, *args, **options):
     translation.activate('en')
     set_id = '72157629276386494'
     page = 1
     set_url = 'https://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=' + FLICKR_API_KEY + '&photoset_id=' + set_id + '&extras=license,owner_name&format=json&nojsoncallback=1&page=' + str(page)
     # https://farm{farm-id}.staticflickr.com/{server-id}/{id}_{o-secret}_o.(jpg|gif|png)
     image_url_template = 'https://farm%s.staticflickr.com/%s/%s_%s_b.jpg'
     # https://www.flickr.com/photos/{user-id}/{photo-id}
     reference_url_template = 'https://www.flickr.com/photos/%s/%s'
     request = urllib2.Request(set_url)
     response = urllib2.urlopen(request)
     data = response.read()
     data = json.loads(data)
     source = Source.objects.filter(description='Flickr').first()
     if not source:
         source = Source(
             name='Flickr',
             description='Flickr'
         )
         source.save()
     album = CatAlbum.objects.get(pk=15)
     for photo in data['photoset']['photo']:
         if not self._resource_already_exists(photo['id']):
             new_photo = CatPhoto(
                 source=source,
                 source_url=(reference_url_template % ('swedish_heritage_board', photo['id'])),
                 source_key=photo['id'],
                 title=photo['title'],
                 author='Berit Wallenberg'
             )
             try:
                 image_url = image_url_template % (photo['farm'], photo['server'], photo['id'], photo['secret'])
                 opener = urllib2.build_opener()
                 opener.addheaders = [("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36")]
                 img_response = opener.open(image_url)
                 new_photo.image.save("ceric.jpg", ContentFile(img_response.read()))
                 new_photo.save()
                 album.photos.add(new_photo)
             except:
                 print "Problem loading image %s" % photo['id']
                 continue
예제 #3
0
 def handle(self, *args, **options):
     activate("en")
     parser = etree.XMLParser(encoding="utf-8", recover=True)
     tree = etree.parse(
         ABSOLUTE_PROJECT_ROOT + "/project/sift/management/commands/early-photographically-illustrated-books.xml",
         parser,
     )
     album = CatAlbum.objects.get(pk=11)
     source = Source.objects.get(pk=59)
     opener = urllib2.build_opener()
     opener.addheaders = [
         (
             "User-Agent",
             "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36",
         )
     ]
     count = 0
     for item in tree.getroot().iterchildren("item"):
         count += 1
         if count > 144:
             cp = CatPhoto(
                 title=item.find("title").text.strip(),
                 author=item.find("item_creator").text.strip(),
                 source=source,
                 source_url=item.find("url").text.strip(),
                 source_key=item.find("uid").text.strip(),
             )
             try:
                 img_response = opener.open(item.find("full_image_url").text)
                 cp.image.save("bl.jpg", ContentFile(img_response.read()))
                 cp.save()
                 album.photos.add(cp)
             except urllib2.HTTPError:
                 print "Not found"
                 print item.find("full_image_url").text
         print count
     album.save()
예제 #4
0
def cat_curator_upload_handler(request):
    profile = request.get_user().catprofile

    curator_album_select_form = CatTaggerAlbumSelectionForm(request.POST)
    curator_album_create_form = CatCuratorAlbumAddForm(request.POST)

    selection_json = request.POST.get('selection') or None
    selection = None
    if selection_json is not None:
        # Query again to block p**n
        parsed_selection = loads(selection_json)
        ids = [k for k, v in parsed_selection.iteritems()]
        response = _curator_get_records_by_ids(ids)
        parsed_response = loads(response.text)['result']
        parsed_kv = {}
        for each in parsed_response:
            parsed_kv[each['id']] = each
        for k, v in parsed_selection.iteritems():
            for sk, sv in parsed_kv[k].iteritems():
                parsed_selection[k][sk] = sv
        selection = parsed_selection

    ret = {
        'photos': {}
    }

    if selection and len(selection) > 0 and profile is not None \
            and (curator_album_select_form.is_valid() or curator_album_create_form.is_valid()):
        if curator_album_select_form.is_valid():
            album = curator_album_select_form.cleaned_data['album']
        else:
            album = CatAlbum(
                title=curator_album_create_form.cleaned_data['title'],
                subtitle=curator_album_create_form.cleaned_data['subtitle'],
            )
            album.save()
        ret['album_id'] = album.id
        for k, v in selection.iteritems():
            upload_form = CatCuratorPhotoUploadForm(v)
            if upload_form.is_valid():
                if upload_form.cleaned_data['institution']:
                    upload_form.cleaned_data['institution'] = upload_form.cleaned_data['institution'].split(',')[0]
                    source = Source.objects.filter(description=upload_form.cleaned_data['institution']).first()
                    if not source:
                        source = Source(
                            name=upload_form.cleaned_data['institution'],
                            description=upload_form.cleaned_data['institution']
                        )
                        source.save()
                else:
                    source = Source.objects.get(name='AJP')
                if upload_form.cleaned_data['id'] and upload_form.cleaned_data['id'] != '':
                    incoming_muis_id = upload_form.cleaned_data['id']
                    if '_' in incoming_muis_id:
                        muis_id = incoming_muis_id.split('_')[0]
                        muis_media_id = incoming_muis_id.split('_')[1]
                    else:
                        muis_id = incoming_muis_id
                        muis_media_id = None
                    if muis_media_id:
                        existing_photo = CatPhoto.objects.filter(source=source, muis_id=muis_id,
                                                                 muis_media_id=muis_media_id).first()
                    else:
                        existing_photo = CatPhoto.objects.filter(source=source, muis_id=muis_id).first()
                    if not existing_photo:
                        new_photo = None
                        try:
                            new_photo = CatPhoto(
                                title=upload_form.cleaned_data['title'].rstrip().encode('utf-8'),
                                author=upload_form.cleaned_data['creators'].encode('utf-8'),
                                source=source,
                                source_key=upload_form.cleaned_data['identifyingNumber'],
                                source_url=upload_form.cleaned_data['urlToRecord'],
                                muis_id=upload_form.cleaned_data['id'].split('_')[0],
                                muis_media_id=upload_form.cleaned_data['id'].split('_')[1] if len(upload_form.cleaned_data['id'].split('_')) > 1 else None,
                                flip=upload_form.cleaned_data['flip'],
                                invert=upload_form.cleaned_data['invert'],
                                stereo=upload_form.cleaned_data['stereo'],
                                rotated=upload_form.cleaned_data['rotated']
                            )
                            new_photo.save()
                            opener = urllib2.build_opener()
                            opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36')]
                            img_response = opener.open(upload_form.cleaned_data['imageUrl'])
                            new_photo.image.save('cat-muis.jpg', ContentFile(img_response.read()))
                            photo_path = MEDIA_ROOT + '/' + str(new_photo.image)
                            if new_photo.invert:
                                img = Image.open(photo_path)
                                inverted_grayscale_image = ImageOps.invert(img).convert('L')
                                inverted_grayscale_image.save(photo_path)
                            if new_photo.rotated > 0:
                                img = Image.open(photo_path)
                                rot = img.rotate(new_photo.rotated, expand=1)
                                rot.save(photo_path)
                                new_photo.width = rot.size[0]
                                new_photo.height = rot.size[1]
                                new_photo.save()
                            if new_photo.flip:
                                img = Image.open(photo_path)
                                flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
                                flipped.save(photo_path)
                            ret['photos'][k] = {}
                            ret['photos'][k]['message'] = _('OK')
                            new_photo.save()
                            if album:
                                album.photos.add(new_photo)
                            ret['photos'][k]['success'] = True
                        except:
                            if new_photo:
                                new_photo.image.delete()
                                new_photo.delete()
                            ret['photos'][k] = {}
                            ret['photos'][k]['error'] = _('Error uploading file')
                    else:
                        if album:
                            album.photos.add(existing_photo)
                        ret['photos'][k] = {}
                        ret['photos'][k]['success'] = True
                        ret['photos'][k]['message'] = _('Photo already exists in Sift')
        if album:
            album.save()
    else:
        if not selection or len(selection) == 0:
            error = _('Please add photos to your album')
        else:
            error = _('Not enough data submitted')
        ret = {
            'error': error
        }

    return HttpResponse(dumps(ret), content_type='application/json')