Ejemplo n.º 1
0
    def setUp(self):
        super(FivehundredPXTestCase, self).setUp()
        self.consumer_key = CONSUMER_KEY
        self.consumer_secret = CONSUMER_SECRET
        self.oauth_token = OAUTH_TOKEN
        self.oauth_token_secret = OAUTH_TOKEN_SECRET
        self.handler = OAuthHandler(self.consumer_key, self.consumer_secret)
        self.handler.set_access_token(self.oauth_token,
                                      self.oauth_token_secret)
        self.api = FiveHundredPXAPI(auth_handler=self.handler)
        self.unauthorized_api = FiveHundredPXAPI()

        if SECOND_USER:
            self.second_handler = OAuthHandler(self.consumer_key,
                                               self.consumer_secret)
            self.second_oauth_token = SECOND_OAUTH_TOKEN
            self.second_oauth_token_secret = SECOND_OAUTH_TOKEN_SECRET
            self.second_handler.set_access_token(
                self.second_oauth_token, self.second_oauth_token_secret)
            self.second_api = FiveHundredPXAPI(
                auth_handler=self.second_handler)

        self.follower_id = '925306'
        self.user_id = '642049'
        self.filepath = 'images/africa.jpg'
Ejemplo n.º 2
0
 def setUp(self):
     super(BaseTestCase, self).setUp()
     self.handler = OAuthHandler(self.consumer_key, self.consumer_secret)
     self.handler.set_access_token(self.oauth_token,
                                   self.oauth_token_secret)
     self.api = FiveHundredPXAPI(auth_handler=self.handler)
     self.unauthorized_api = FiveHundredPXAPI()
     self.follower_id = '925306'  # test user id
     self.user_id = '727199'  # this is akirahrkw's id
     self.photo = None  # sample photo for test
Ejemplo n.º 3
0
 def setUp(self):
     super(BaseTestCase, self).setUp()
     self.handler            = OAuthHandler(self.consumer_key, self.consumer_secret)
     self.handler.set_access_token(self.oauth_token, self.oauth_token_secret)
     self.api		   	    = FiveHundredPXAPI(auth_handler=self.handler)
     self.unauthorized_api   = FiveHundredPXAPI()
     self.follower_id = '925306' # test user id
     self.user_id     = '727199' # this is akirahrkw's id
     self.photo = None # sample photo for test
Ejemplo n.º 4
0
    def setUp(self):
        super(FivehundredPXTestCase, self).setUp()
        self.consumer_key       = CONSUMER_KEY
        self.consumer_secret    = CONSUMER_SECRET
        self.oauth_token        = OAUTH_TOKEN
        self.oauth_token_secret = OAUTH_TOKEN_SECRET
        self.handler            = OAuthHandler(self.consumer_key,self.consumer_secret)
        self.handler.set_access_token(self.oauth_token,self.oauth_token_secret)
        self.api		   	    = FiveHundredPXAPI(auth_handler=self.handler)
        self.unauthorized_api   = FiveHundredPXAPI()

        if SECOND_USER:
            self.second_handler            = OAuthHandler(self.consumer_key,self.consumer_secret)
            self.second_oauth_token        = SECOND_OAUTH_TOKEN
            self.second_oauth_token_secret = SECOND_OAUTH_TOKEN_SECRET
            self.second_handler.set_access_token(self.second_oauth_token, self.second_oauth_token_secret)
            self.second_api		           = FiveHundredPXAPI(auth_handler=self.second_handler)

        self.follower_id = '925306'
        self.user_id     = '642049'
        self.filepath    = 'images/africa.jpg'
Ejemplo n.º 5
0
def get_location_images(land_mark_id):
    '''
    Function used to hooked in 500px API to get images based on location land mark.
    '''
    CONSUMER_KEY = 'RWABV8oGpEnZff17T3J7FM417m5l0NrO5zeQfrrF'
    CONSUMER_SECRET = 'C2ppB7O2NKXhzAZgK7N6Gd0rQL6aJI5OvQimysXG'

    handler = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    api = FiveHundredPXAPI(handler)
    land_mark = LandMark.objects.get(id=land_mark_id)

    photo = api.photos_search(
        rpp=10,
        only=
        "City and Architecture,Landscapes,Nature,Travel,Urban Exploration,Street, Commercial",
        term=land_mark.name,
        geo='%s,%s,5km' % (land_mark.latitude, land_mark.longitude),
        consumer_key=CONSUMER_KEY)

    if not photo['photos']:
        photo = api.photos_search(rpp=10,
                                  geo='%s,%s,5km' %
                                  (land_mark.latitude, land_mark.longitude),
                                  consumer_key=CONSUMER_KEY)

    if photo['photos']:
        for data in photo['photos']:
            images = data['images'][0]
            image_url = images['url']
            image_format = images['format']
            description = data['description']
            date_created = data['created_at']
            owner = data['user']['fullname']
            Image.objects.get_or_create(date_added=date_created,
                                        land_mark=land_mark,
                                        image=image_url,
                                        image_type=image_format,
                                        description=description,
                                        owner=owner)
Ejemplo n.º 6
0
	def __init__(self,searchEngine):
		self.searchEngine = searchEngine
		self.count = 0
		if searchEngine == 'google':
			self.baseDir = 'googleImageResults'
			self.rootUrl = 'https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q='
			self.apiKey = 'replace your api key here' # not needed if want < 64 images. Have not implemented the paid account version
			self.opUrlKey = 'unescapedUrl'
		elif searchEngine == 'bing':
			self.baseDir = 'bingImageResults'
			self.rootUrl = 'https://api.datamarket.azure.com/Bing/Search/v1/Image?Query='
			self.apiKey = 'replace your api key here'
			self.opUrlKey = 'MediaUrl'
		elif searchEngine == '500px':
			self.baseDir = '500pxImageResults'
			self.CONSUMER_KEY = 'your consumer key here'
			self.CONSUMER_SECRET = 'your consumer secret here'
			self.opUrlKey = 'image_url'
			# oauth details
			self.handler = OAuthHandler(self.CONSUMER_KEY,self.CONSUMER_SECRET)
			self.requestToken = self.handler.get_request_token()
			self.handler.set_request_token(self.requestToken.key,self.requestToken.secret)
			username = raw_input("Input your username: "******"Press Enter")
			self.api.get_token_part_two((self.token,self.frob))
			# self.cc_licenses = '1, 2, 3, 4, 5, 6, 7' for cc license search
			self.cc_licenses = ''
Ejemplo n.º 7
0
class BaseTestCase(unittest.TestCase):
	
    def setUp(self):
        super(BaseTestCase, self).setUp()
        self.handler            = OAuthHandler(self.consumer_key, self.consumer_secret)
        self.handler.set_access_token(self.oauth_token, self.oauth_token_secret)
        self.api		   	    = FiveHundredPXAPI(auth_handler=self.handler)
        self.unauthorized_api   = FiveHundredPXAPI()
        self.follower_id = '925306' # test user id
        self.user_id     = '727199' # this is akirahrkw's id
        self.photo = None # sample photo for test

    def tearDown(self):
        pass

    def _get_sample_photo(self):
        if not self.photo:
            json = self.api.photos(require_auth=True, feature='user', user_id=self.follower_id, rpp=1)
            self.assertIsNotNone(json)
            self.photo = json['photos'][0]
        return self.photo	
Ejemplo n.º 8
0
class BaseTestCase(unittest.TestCase):
    def setUp(self):
        super(BaseTestCase, self).setUp()
        self.handler = OAuthHandler(self.consumer_key, self.consumer_secret)
        self.handler.set_access_token(self.oauth_token,
                                      self.oauth_token_secret)
        self.api = FiveHundredPXAPI(auth_handler=self.handler)
        self.unauthorized_api = FiveHundredPXAPI()
        self.follower_id = '925306'  # test user id
        self.user_id = '727199'  # this is akirahrkw's id
        self.photo = None  # sample photo for test

    def tearDown(self):
        pass

    def _get_sample_photo(self):
        if not self.photo:
            json = self.api.photos(require_auth=True,
                                   feature='user',
                                   user_id=self.follower_id,
                                   rpp=1)
            self.assertIsNotNone(json)
            self.photo = json['photos'][0]
        return self.photo
Ejemplo n.º 9
0
from fivehundredpx.client import FiveHundredPXAPI
from os import environ
import numpy as np
import csv

CONSUMER_KEY = environ['PX_CONSUMER_KEY']
api = FiveHundredPXAPI()

feature_list = ['fresh_today']
maxlimit = 1000

allurls = np.chararray((maxlimit * len(feature_list), ), itemsize=300)
allratings = np.zeros((maxlimit * len(feature_list), ))

for idx, feature_type in enumerate(feature_list):
    photos = api.photos(consumer_key=CONSUMER_KEY,
                        feature=feature_type,
                        image_size=21,
                        sort_direction='asc',
                        page=1,
                        rpp=maxlimit)

    urls = map(lambda x: x['image_url'], photos['photos'])
    ratings = map(lambda x: x['highest_rating'], photos['photos'])
    allurls[idx * maxlimit:(idx + 1) * maxlimit] = urls
    allratings[idx * maxlimit:(idx + 1) * maxlimit] = ratings

_, idx = np.unique(allurls, return_index=True)

img = allurls[idx]
rat = allratings[idx]
Ejemplo n.º 10
0
    def get_land_mark(self):
        '''
        Get a list of images based pre-defined locations.
        Land marks and Images are accessed via the foursquare and 500px apis respectively.
        https://github.com/500px/api-documentation/
        https://developer.foursquare.com/docs/
        run python manage.py get_land_mark
        to import this data.
        '''
        default_locations = ['New York', 'Durban', 'Sydney']
        client_id = 'FJ3DPZHYKN2DWSGBFQFCTYZSO0QQFQWENMPG041GC1HMHN5R'
        client_secret = 'CQ2LADABJOEI4R5UTKUNXSCF0VT4GBQEZBJVY4OCLLV5CY1W'
        redirect_uri = 'http://fondu.com/oauth/authorize'
        CONSUMER_KEY = 'RWABV8oGpEnZff17T3J7FM417m5l0NrO5zeQfrrF'
        CONSUMER_SECRET = 'C2ppB7O2NKXhzAZgK7N6Gd0rQL6aJI5OvQimysXG'

        handler = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        api = FiveHundredPXAPI(handler)
        client = foursquare.Foursquare(client_id=client_id,
                                       client_secret=client_secret,
                                       redirect_uri=redirect_uri)
        for location in default_locations:
            print "Getting Location Data For %s" % location
            data = client.venues.search(params={'near': location, 'limit': 1})
            name = data['venues'][0]['name']
            contact = data['venues'][0]['contact']
            data = data['venues'][0]['location']

            country = data['country'] if 'iNingizimu Afrika' != data[
                'country'] else 'South Africa'
            province = data['state'] if 'state' in data else 'Unknown'
            region = data['city'] if 'city' in data else location
            country_code = data['cc'] if 'cc' in data else 'Unknown'
            latitude = data['lat'] if 'lat' in data else 'Unknown'
            longitude = data['lng'] if 'lng' in data else 'Unknown'

            location_obj, created = Location.objects.get_or_create(
                country=country,
                province=province,
                region=region,
                cc=country_code,
                latitude=latitude,
                longitude=longitude)

            address = data['formattedAddress']
            latitude = data['lat']
            longitude = data['lng']

            if 'formattedPhone' in contact:
                number = contact['formattedPhone']
            else:
                number = None

            print "Getting Land Mark Data For %s" % location
            land_mark, created = LandMark.objects.get_or_create(
                name=name,
                address=address[0],
                latitude=latitude,
                longitude=longitude,
                phone_number=number,
                location=location_obj)

            print "Getting Image Data For %s" % location
            json = api.photos_search(
                only=
                "City and Architecture,Landscapes,Nature,Travel,Urban Exploration,Street, Commercial",
                rpp=10,
                term=land_mark.name,
                geo='%s,%s,5km' % (land_mark.latitude, land_mark.longitude),
                consumer_key=CONSUMER_KEY)

            if json['photos']:
                for data in json['photos']:
                    images = data['images'][0]
                    image_url = images['url']
                    image_format = images['format']
                    description = data['description']
                    date_created = data['created_at']
                    owner = data['user']['fullname']
                    Image.objects.get_or_create(date_added=date_created,
                                                land_mark=land_mark,
                                                image=image_url,
                                                image_type=image_format,
                                                description=description,
                                                owner=owner)
Ejemplo n.º 11
0
_CONSUMER_KEY = 'LvUFQHMQgSlaWe3aRQot6Ct5ZC2pdTMyTLS0GMfF'
_RPP = int(xbmcplugin.getSetting(fivehundredpxutils.xbmc.addon_handle, 'rpp'))
_LIMITP = str(
    xbmcplugin.getSetting(fivehundredpxutils.xbmc.addon_handle, 'limitpages'))
_MAXP = int(
    xbmcplugin.getSetting(fivehundredpxutils.xbmc.addon_handle, 'maxpages'))
_IMGSIZE = int(
    xbmcplugin.getSetting(fivehundredpxutils.xbmc.addon_handle, 'imgsize'))
_TMBSIZE = int(
    xbmcplugin.getSetting(fivehundredpxutils.xbmc.addon_handle, 'tmbsize'))
_USERNAME = str(
    xbmcplugin.getSetting(fivehundredpxutils.xbmc.addon_handle, 'username'))
_TMBFOLDERS = str(
    xbmcplugin.getSetting(fivehundredpxutils.xbmc.addon_handle, 'tmbfolders'))

API = FiveHundredPXAPI()


class Image(object):
    """ Holds information about a single image """
    def __init__(self, photo_json):
        self.name = photo_json['name']
        self.thumb_url = photo_json['images'][0]['url']
        self.url = photo_json['images'][1]['url']
        self.username = photo_json['user']['username']
        self.userfullname = photo_json['user']['fullname']

    def __repr__(self):
        return str(self.__dict__)

Ejemplo n.º 12
0
class FivehundredPXTestCase(unittest.TestCase):
	
    def setUp(self):
        super(FivehundredPXTestCase, self).setUp()
        self.consumer_key       = CONSUMER_KEY
        self.consumer_secret    = CONSUMER_SECRET
        self.oauth_token        = OAUTH_TOKEN
        self.oauth_token_secret = OAUTH_TOKEN_SECRET
        self.handler            = OAuthHandler(self.consumer_key,self.consumer_secret)
        self.handler.set_access_token(self.oauth_token,self.oauth_token_secret)
        self.api		   	    = FiveHundredPXAPI(auth_handler=self.handler)
        self.unauthorized_api   = FiveHundredPXAPI()

        if SECOND_USER:
            self.second_handler            = OAuthHandler(self.consumer_key,self.consumer_secret)
            self.second_oauth_token        = SECOND_OAUTH_TOKEN
            self.second_oauth_token_secret = SECOND_OAUTH_TOKEN_SECRET
            self.second_handler.set_access_token(self.second_oauth_token, self.second_oauth_token_secret)
            self.second_api		           = FiveHundredPXAPI(auth_handler=self.second_handler)

        self.follower_id = '925306'
        self.user_id     = '642049'
        self.filepath    = 'images/africa.jpg'
		
    def tearDown(self):
        pass

    def testusers(self):
        self.api.users()
	
    def testusersshow(self):
        self.unauthorized_api.users_show(consumer_key=self.consumer_key, id='727199')
        self.unauthorized_api.users_show(consumer_key=self.consumer_key, username='******')        
        self.unauthorized_api.users_show(consumer_key=self.consumer_key, email='*****@*****.**')
        self.api.users_show(require_auth=True,id='727199')
        self.api.users_show(require_auth=True,username='******')        
        self.api.users_show(require_auth=True,email='*****@*****.**')

    def testuserfriends(self):
        self.unauthorized_api.users_friends(consumer_key=self.consumer_key,id=self.user_id,rpp=5,page=2)
        self.api.users_friends(require_auth=True,id=self.user_id,rpp=5,page=2)

        self.api.users_friends_post(require_auth=True,id=self.follower_id)
        self.api.users_friends_delete(require_auth=True,id=self.follower_id)

    def testuserfollowers(self):
        self.unauthorized_api.users_followers(consumer_key=self.consumer_key,id=self.user_id,rpp=5,page=2)
        self.api.users_followers(require_auth=True,id=self.user_id,rpp=5,page=2)

    def testblogs(self):
        self.unauthorized_api.blogs(consumer_key=self.consumer_key,rpp=2,page=1)
        blogs = self.api.blogs(require_auth=True,rpp=2,page=1)
        for blog in blogs['blog_posts']:
            blog     = self.api.blogs_id(require_auth=True,id=blog['id'])	
            comments = self.api.blogs_comments(require_auth=True,id=blog['id'])	

    def testblogspost(self):
        blog = self.api.blogs_post(title='title test', body='body test', tags='akira,hirakawa')
        time.sleep(2)
        uid = blog['id']
        self.api.blogs_update(id=uid, title='title test 2', body='body test 2', tags='akira,hirakawa')
        self.api.blogs_comments_post(id=uid, body='test blog comment')
        self.api.blogs_delete(id=uid)

    def testcollections(self):
        collection = self.api.collections_post(require_auth=True, title='collection title', path='test')
        self.api.collections_update(require_auth=True, id=collection['id'], title='collection title 2', path='test2')
        
        collections = self.api.collections(require_auth=True,rpp=2,page=1)
        for collection in collections['collections']:
            self.api.collections_id(require_auth=True, id=collection['id'])

        self.api.collections_delete(id=collection['id'])

    def testphotos(self):
        json = self.unauthorized_api.photos(feature='popular',consumer_key=self.consumer_key)
        json = self.api.photos(require_auth=True, feature='popular',rpp=3)
        self.assert_( len(json['photos']) == 3 )

        for photo in json['photos']:
            photo_id = photo['id']
            self.unauthorized_api.photos_id(id=photo_id,consumer_key=self.consumer_key)
            self.api.photos_id(require_auth=True,id=photo_id)
            self.unauthorized_api.photos_comments(id=photo_id,consumer_key=self.consumer_key)

    def testphotosgenerator(self):
        gen = self.api.photos(require_auth=True, feature='popular',rpp=1, as_generator=True)
        for g in gen: g

    def testphotossearch(self):
        json = self.unauthorized_api.photos_search(consumer_key=self.consumer_key,term='test',rpp=1,page=1)
        json = self.api.photos_search(require_auth=True, term='test',rpp=1,page=1)
        self.assert_( len(json['photos']) == 1 )

    def _update_photo(self,photo_id):
        self.api.photos_comments_post(id=photo_id,body='test comment')

        self.api.photos_favorite_post(id=photo_id)
        self.api.photos_favorite_delete(id=photo_id)
	
        self.api.photos_tags_post(id=photo_id,tags='test,test2')
        self.api.photos_tags_delete(id=photo_id,tags='test,test2')

        if SECOND_USER:
            self.api.photos_vote_post(id=photo_id,vote='1')

        self.api.photos_update(id=photo_id,name='akira test',description='akira description')

    def testphotospost(self):

        api =  self.api if not SECOND_USER else self.second_api
        access_key =  self.oauth_token if not SECOND_USER else self.second_oauth_token
        json = api.photos_post()
        photo_id   = json['photo']['id']
        upload_key = str(json['upload_key'])

        api.upload_photo(
            photo_id=photo_id,
            filename=self.filepath,
            consumer_key=self.consumer_key,
            upload_key=upload_key,
            access_key=access_key
        )
        time.sleep(3)
        self._update_photo(photo_id)
        time.sleep(1)
        api.photos_delete(id=photo_id)

        json = api.photos_post()
        photo_id   = json['photo']['id']
        upload_key = str(json['upload_key'])
        file_type = mimetypes.guess_type(self.filepath)
        
        fp = open(self.filepath,'rb')

        api.upload_photo(
            photo_id=photo_id,
            fp=fp,
            file_type=file_type[0],
            consumer_key=self.consumer_key,
            upload_key=upload_key,
            access_key=access_key
        )

        fp.close()
        time.sleep(3)
        api.photos_delete(id=photo_id)
Ejemplo n.º 13
0
from fivehundredpx.client import FiveHundredPXAPI
from os import environ
import numpy as np
import csv 

CONSUMER_KEY = environ['PX_CONSUMER_KEY']
api = FiveHundredPXAPI()

feature_list = ['popular','highest_rated','upcoming','editors','fresh_today','fresh_yesterday','fresh_week']
maxlimit = 1000

allurls    = np.chararray((maxlimit*len(feature_list),),itemsize=300)
allratings = np.zeros((maxlimit*len(feature_list),))

for idx, feature_type in enumerate(feature_list):
    photos = api.photos(consumer_key=CONSUMER_KEY,
                    feature=feature_type,
                    image_size=21,
                    sort_direction='asc',
                    page=1,
                    rpp=maxlimit)

    urls    = map(lambda x: x['image_url'], photos['photos'])
    ratings = map(lambda x: x['highest_rating'], photos['photos'])
    allurls[idx*maxlimit:(idx+1)*maxlimit]    = urls
    allratings[idx*maxlimit:(idx+1)*maxlimit] = ratings

_, idx = np.unique(allurls, return_index=True)

img = allurls[idx]
rat = allratings[idx]
Ejemplo n.º 14
0
class FivehundredPXTestCase(unittest.TestCase):
    def setUp(self):
        super(FivehundredPXTestCase, self).setUp()
        self.consumer_key = CONSUMER_KEY
        self.consumer_secret = CONSUMER_SECRET
        self.oauth_token = OAUTH_TOKEN
        self.oauth_token_secret = OAUTH_TOKEN_SECRET
        self.handler = OAuthHandler(self.consumer_key, self.consumer_secret)
        self.handler.set_access_token(self.oauth_token,
                                      self.oauth_token_secret)
        self.api = FiveHundredPXAPI(auth_handler=self.handler)
        self.unauthorized_api = FiveHundredPXAPI()

        if SECOND_USER:
            self.second_handler = OAuthHandler(self.consumer_key,
                                               self.consumer_secret)
            self.second_oauth_token = SECOND_OAUTH_TOKEN
            self.second_oauth_token_secret = SECOND_OAUTH_TOKEN_SECRET
            self.second_handler.set_access_token(
                self.second_oauth_token, self.second_oauth_token_secret)
            self.second_api = FiveHundredPXAPI(
                auth_handler=self.second_handler)

        self.follower_id = '925306'
        self.user_id = '642049'
        self.filepath = 'images/africa.jpg'

    def tearDown(self):
        pass

    def testusers(self):
        self.api.users()

    def testusersshow(self):
        self.unauthorized_api.users_show(consumer_key=self.consumer_key,
                                         id='727199')
        self.unauthorized_api.users_show(consumer_key=self.consumer_key,
                                         username='******')
        self.unauthorized_api.users_show(consumer_key=self.consumer_key,
                                         email='*****@*****.**')
        self.api.users_show(require_auth=True, id='727199')
        self.api.users_show(require_auth=True, username='******')
        self.api.users_show(require_auth=True, email='*****@*****.**')

    def testuserfriends(self):
        self.unauthorized_api.users_friends(consumer_key=self.consumer_key,
                                            id=self.user_id,
                                            rpp=5,
                                            page=2)
        self.api.users_friends(require_auth=True,
                               id=self.user_id,
                               rpp=5,
                               page=2)

        self.api.users_friends_post(require_auth=True, id=self.follower_id)
        self.api.users_friends_delete(require_auth=True, id=self.follower_id)

    def testuserfollowers(self):
        self.unauthorized_api.users_followers(consumer_key=self.consumer_key,
                                              id=self.user_id,
                                              rpp=5,
                                              page=2)
        self.api.users_followers(require_auth=True,
                                 id=self.user_id,
                                 rpp=5,
                                 page=2)

    def testblogs(self):
        self.unauthorized_api.blogs(consumer_key=self.consumer_key,
                                    rpp=2,
                                    page=1)
        blogs = self.api.blogs(require_auth=True, rpp=2, page=1)
        for blog in blogs['blog_posts']:
            blog = self.api.blogs_id(require_auth=True, id=blog['id'])
            comments = self.api.blogs_comments(require_auth=True,
                                               id=blog['id'])

    def testblogspost(self):
        blog = self.api.blogs_post(title='title test',
                                   body='body test',
                                   tags='akira,hirakawa')
        time.sleep(2)
        uid = blog['id']
        self.api.blogs_update(id=uid,
                              title='title test 2',
                              body='body test 2',
                              tags='akira,hirakawa')
        self.api.blogs_comments_post(id=uid, body='test blog comment')
        self.api.blogs_delete(id=uid)

    def testcollections(self):
        collection = self.api.collections_post(require_auth=True,
                                               title='collection title',
                                               path='test')
        self.api.collections_update(require_auth=True,
                                    id=collection['id'],
                                    title='collection title 2',
                                    path='test2')

        collections = self.api.collections(require_auth=True, rpp=2, page=1)
        for collection in collections['collections']:
            self.api.collections_id(require_auth=True, id=collection['id'])

        self.api.collections_delete(id=collection['id'])

    def testphotos(self):
        json = self.unauthorized_api.photos(feature='popular',
                                            consumer_key=self.consumer_key)
        json = self.api.photos(require_auth=True, feature='popular', rpp=3)
        self.assert_(len(json['photos']) == 3)

        for photo in json['photos']:
            photo_id = photo['id']
            self.unauthorized_api.photos_id(id=photo_id,
                                            consumer_key=self.consumer_key)
            self.api.photos_id(require_auth=True, id=photo_id)
            self.unauthorized_api.photos_comments(
                id=photo_id, consumer_key=self.consumer_key)

    def testphotosgenerator(self):
        gen = self.api.photos(require_auth=True,
                              feature='popular',
                              rpp=1,
                              as_generator=True)
        for g in gen:
            g

    def testphotossearch(self):
        json = self.unauthorized_api.photos_search(
            consumer_key=self.consumer_key, term='test', rpp=1, page=1)
        json = self.api.photos_search(require_auth=True,
                                      term='test',
                                      rpp=1,
                                      page=1)
        self.assert_(len(json['photos']) == 1)

    def _update_photo(self, photo_id):
        self.api.photos_comments_post(id=photo_id, body='test comment')

        self.api.photos_favorite_post(id=photo_id)
        self.api.photos_favorite_delete(id=photo_id)

        self.api.photos_tags_post(id=photo_id, tags='test,test2')
        self.api.photos_tags_delete(id=photo_id, tags='test,test2')

        if SECOND_USER:
            self.api.photos_vote_post(id=photo_id, vote='1')

        self.api.photos_update(id=photo_id,
                               name='akira test',
                               description='akira description')

    def testphotospost(self):

        api = self.api if not SECOND_USER else self.second_api
        access_key = self.oauth_token if not SECOND_USER else self.second_oauth_token
        json = api.photos_post()
        photo_id = json['photo']['id']
        upload_key = str(json['upload_key'])

        api.upload_photo(photo_id=photo_id,
                         filename=self.filepath,
                         consumer_key=self.consumer_key,
                         upload_key=upload_key,
                         access_key=access_key)
        time.sleep(3)
        self._update_photo(photo_id)
        time.sleep(1)
        api.photos_delete(id=photo_id)

        json = api.photos_post()
        photo_id = json['photo']['id']
        upload_key = str(json['upload_key'])
        file_type = mimetypes.guess_type(self.filepath)

        fp = open(self.filepath, 'rb')

        api.upload_photo(photo_id=photo_id,
                         fp=fp,
                         file_type=file_type[0],
                         consumer_key=self.consumer_key,
                         upload_key=upload_key,
                         access_key=access_key)

        fp.close()
        time.sleep(3)
        api.photos_delete(id=photo_id)
Ejemplo n.º 15
0
class CrawlData():
	def __init__(self,searchEngine):
		self.searchEngine = searchEngine
		self.count = 0
		if searchEngine == 'google':
			self.baseDir = 'googleImageResults'
			self.rootUrl = 'https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q='
			self.apiKey = 'replace your api key here' # not needed if want < 64 images. Have not implemented the paid account version
			self.opUrlKey = 'unescapedUrl'
		elif searchEngine == 'bing':
			self.baseDir = 'bingImageResults'
			self.rootUrl = 'https://api.datamarket.azure.com/Bing/Search/v1/Image?Query='
			self.apiKey = 'replace your api key here'
			self.opUrlKey = 'MediaUrl'
		elif searchEngine == '500px':
			self.baseDir = '500pxImageResults'
			self.CONSUMER_KEY = 'your consumer key here'
			self.CONSUMER_SECRET = 'your consumer secret here'
			self.opUrlKey = 'image_url'
			# oauth details
			self.handler = OAuthHandler(self.CONSUMER_KEY,self.CONSUMER_SECRET)
			self.requestToken = self.handler.get_request_token()
			self.handler.set_request_token(self.requestToken.key,self.requestToken.secret)
			username = raw_input("Input your username: "******"Press Enter")
			self.api.get_token_part_two((self.token,self.frob))
			# self.cc_licenses = '1, 2, 3, 4, 5, 6, 7' for cc license search
			self.cc_licenses = ''

	# you have to generate the urls yourself for flickr
	def grabDataFlickr(self,dataInfo):
		for j in range(len(dataInfo)):
			currFlickrMeta = dataInfo[j]
			currUrl = 'http://farm1.staticflickr.com/{0}/{1}_{2}_z.jpg'.format(
				currFlickrMeta['server'],
				currFlickrMeta['id'],
				currFlickrMeta['secret'])
			opFileName = '{0}/Image_{1:010d}.jpg'.format(self.opDir,self.count)
			print opFileName
			urllib.urlretrieve(currUrl,opFileName)
			self.count = self.count + 1


	def grabData(self,dataInfo):
		for j in range(len(dataInfo)):
			currUrl = dataInfo[j][self.opUrlKey]
			opFileName = '{0}/Image_{1:010d}.jpg'.format(self.opDir,self.count)
			print opFileName
			urllib.urlretrieve(currUrl,opFileName)
			self.count = self.count + 1

	def doSearch(self,queryTerm,pageNumber):

		self.opDir = self.baseDir + '/' + queryTerm
		if not os.path.exists(self.opDir):
			os.makedirs(self.opDir)
	
		if self.searchEngine == 'google':
			searchUrl = self.rootUrl + urllib.quote(queryTerm) +'&start='+str(pageNumber*8)+'&userip=MyIP&rsz=8&imgtype=photo'
			try:
				response = requests.get(searchUrl).json()
				dataInfo = response['responseData']['results']
			except (IndexError,TypeError,ValueError,NameError):  
				print 'skipping'
				return 

		elif self.searchEngine == 'bing':
			searchUrl = self.rootUrl + '%27' + urllib.quote(queryTerm) + '%27&$format=json&$skip=' + str(pageNumber*10)
			try:
				response = requests.get(searchUrl, auth=(self.apiKey,self.apiKey)).json()
				dataInfo = response['d']['results']	
			except (IndexError,TypeError,ValueError,NameError):  
				print 'skipping'
				return 

		elif self.searchEngine == 'flickr':
			# documentation available at http://www.flickr.com/services/api/flickr.photos.search.html
			try:
				if not self.cc_licenses:
					responseUnStripped = self.api.photos_search(text=queryTerm, 
						content_type=1,
						page=(pageNumber+1),
						format='json')
				else:
					responseUnStripped = self.api.photos_search(text=queryTerm, 
						content_type=1, 
						page =(pageNumber+1),
						license=self.cc_licenses,
						format='json')
				response = simplejson.loads(re.search(r'jsonFlickrApi\(>?(.+)\)', responseUnStripped).group(1))
				self.grabDataFlickr(response['photos']['photo'])
			except (IndexError,TypeError,ValueError,NameError):  
				print 'skipping'
				return 

		elif self.searchEngine == '500px':
			try:
				response = self.api.photos_search(require_auth=True,
					tag=queryTerm,
					page=(pageNumber+1),
					image_size=5)
				dataInfo = response['photos']
			except (IndexError,TypeError,ValueError,NameError):  
				print 'skipping'
				return 

		self.grabData(dataInfo)
		

	def doSearchPopular(self,pageNumber):
		self.opDir = self.baseDir + '/popular on ' + datetime.datetime.now().strftime('%d-%m-%Y')
		if not os.path.exists(self.opDir):
			os.makedirs(self.opDir)

		if self.searchEngine == '500px':
			try:
				currPage = pageNumber+1
				response = self.api.photos(require_auth=True, 
					feature='popular',
					sort='rating',
					image_size=5,
					page=currPage)
				dataInfo = response['photos']				
			except (IndexError,TypeError,ValueError,NameError):  
				print 'skipping'
				return 

		self.grabData(dataInfo)