Пример #1
0
    def delete(self, type, external_user_id):
        """Unsubscribes from an external user"""
        youtify_user_model = get_current_youtify_user_model()
        if youtify_user_model == None:
            self.error(403)
            return

        external_user_model = ExternalUser.all().filter('type =', type).filter(
            'external_user_id =', external_user_id).get()

        youtify_user_model.external_user_subscriptions.remove(
            external_user_model.key())
        youtify_user_model.save()

        external_user_model.subscribers.remove(youtify_user_model.key())
        external_user_model.nr_of_subscribers = len(
            external_user_model.subscribers)

        if external_user_model.nr_of_subscribers > 0:
            external_user_model.get_last_updated = True
        else:
            external_user_model.get_last_updated = False
        external_user_model.save()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('ok')
Пример #2
0
    def get(self):
        global flattr_thing_cache
        page = int(self.request.get('page', '0'))
        page_size = 30
        count = 0

        #### START MIGRATION CODE ####

        for m in ExternalUser.all().fetch(page_size, page_size * page):
            count += 1
            m.last_checked = datetime.now()
            if m.nr_of_subscribers > 0:
                m.get_last_updated = True
            else:
                m.get_last_updated = False
            m.save()

        #### END MIGRATION CODE ####

        self.response.headers['Content-Type'] = 'text/html'
        if (count < page_size):
            self.response.out.write(Template(COMPLETE).substitute({
                'count': count,
            }))
        else:
            self.response.out.write(Template(TEMPLATE).substitute({
                'progress': page_size * page,
                'next': page + 1,
            }))
Пример #3
0
    def get(self):
        global flattr_thing_cache
        page = int(self.request.get('page', '0'))
        page_size = 30
        count = 0

        #### START MIGRATION CODE ####

        for m in ExternalUser.all().filter('type =', 'soundcloud').fetch(
                page_size, page_size * page):
            count += 1
            import_followings(m.external_user_id)

        #### END MIGRATION CODE ####

        self.response.headers['Content-Type'] = 'text/html'
        if (count < page_size):
            self.response.out.write(
                Template(COMPLETE).substitute({
                    'count': count,
                }))
        else:
            self.response.out.write(
                Template(TEMPLATE).substitute({
                    'progress': page_size * page,
                    'next': page + 1,
                }))
Пример #4
0
    def post(self, type, external_user_id):
        """Marks the external user as viewed"""
        youtify_user_model = get_current_youtify_user_model()
        if youtify_user_model == None:
            self.response.out.write("user not logged in")
            logging.info("user not logged in")
            self.error(403)
            return

        external_user_model = (
            ExternalUser.all().filter("type =", type).filter("external_user_id =", external_user_id).get()
        )
        if external_user_model == None:
            logging.info("external user " + external_user_id + " not found")
            self.response.out.write("external user " + external_user_id + " not found")
            self.error(404)
            return
        external_user_timestamp = (
            ExternalUserTimestamp.all()
            .filter("external_user ="******"user ="******"ok")
Пример #5
0
    def get(self):
        page = int(self.request.get('page', '0'))
        page_size = 30
        count = 0

        #### START MIGRATION CODE ####

        for m in ExternalUser.all().fetch(page_size, page_size * page):
            count += 1
            m.last_checked = datetime.now()
            if m.nr_of_subscribers > 0:
                m.get_last_updated = True
            else:
                m.get_last_updated = False
            m.save()

        #### END MIGRATION CODE ####

        self.response.headers['Content-Type'] = 'text/html'
        if (count < page_size):
            self.response.out.write(Template(COMPLETE).substitute({
                'count': count,
            }))
        else:
            self.response.out.write(Template(TEMPLATE).substitute({
                'progress': page_size * page,
                'next': page + 1,
            }))
Пример #6
0
    def delete(self, type, external_user_id):
        """Unsubscribes from an external user"""
        youtify_user_model = get_current_youtify_user_model()
        if youtify_user_model == None:
            self.error(403)
            return

        external_user_model = (
            ExternalUser.all().filter("type =", type).filter("external_user_id =", external_user_id).get()
        )

        youtify_user_model.external_user_subscriptions.remove(external_user_model.key())
        youtify_user_model.save()

        external_user_model.subscribers.remove(youtify_user_model.key())
        external_user_model.nr_of_subscribers = len(external_user_model.subscribers)

        if external_user_model.nr_of_subscribers > 0:
            external_user_model.get_last_updated = True
        else:
            external_user_model.get_last_updated = False
        external_user_model.save()

        self.response.headers["Content-Type"] = "text/plain"
        self.response.out.write("ok")
Пример #7
0
    def post(self, type, external_user_id):
        """Marks the external user as viewed"""
        youtify_user_model = get_current_youtify_user_model()
        if youtify_user_model == None:
            self.response.out.write('user not logged in')
            logging.info('user not logged in')
            self.error(403)
            return

        external_user_model = ExternalUser.all().filter('type =', type).filter(
            'external_user_id =', external_user_id).get()
        if external_user_model == None:
            logging.info('external user ' + external_user_id + ' not found')
            self.response.out.write('external user ' + external_user_id +
                                    ' not found')
            self.error(404)
            return
        external_user_timestamp = ExternalUserTimestamp.all().filter(
            'external_user ='******'user ='******'ok')
Пример #8
0
    def get(self):
        external_users = (
            ExternalUser.all()
            .filter("get_last_updated =", True)
            .order("last_checked")
            .order("-nr_of_subscribers")
            .fetch(50)
        )
        for external_user in external_users:
            external_user.last_checked = datetime.now()
            external_user.save()

            if external_user.type == "soundcloud":
                try:
                    last_date = datetime.fromtimestamp(0)
                    url = (
                        "http://api.soundcloud.com/users/"
                        + external_user.external_user_id
                        + "/tracks.json?consumer_key=206f38d9623048d6de0ef3a89fea1c4d"
                    )
                    response = urlfetch.fetch(url=url, method=urlfetch.GET)
                    if response.status_code == 200:
                        tracks = simplejson.loads(response.content)
                        for track in tracks:
                            date_temp = datetime.fromtimestamp(0)
                            if "created_at" in track:
                                date_temp = parser.parse(track["created_at"])
                            if date_temp.time() > last_date.time():
                                last_date = date_temp
                        if (
                            last_date.time() > datetime.fromtimestamp(0).time()
                            and last_date.time() != external_user.last_updated.time()
                        ):
                            external_user.last_updated = last_date
                            external_user.save()
                except:
                    pass

            if external_user.type == "youtube":
                try:
                    url = (
                        "https://gdata.youtube.com/feeds/api/users/"
                        + external_user.external_user_id
                        + "/uploads?alt=json&v=2"
                    )
                    response = urlfetch.fetch(url=url, method=urlfetch.GET)
                    logging.info(response.status_code)
                    if response.status_code == 200:
                        tracks = simplejson.loads(response.content)
                        updated = tracks["feed"]["published"]["$t"]
                        last_date = parser.parse(updated)
                        if last_date.time() != external_user.last_updated.time():
                            external_user.last_updated = last_date
                            external_user.save()
                except:
                    pass
Пример #9
0
    def get(self, type, external_user_id):
        """Gets the subscribers of an external user"""
        external_user_model = ExternalUser.all().filter('type =', type).filter('external_user_id =', external_user_id).get()
        json = []

        if external_user_model is not None:
            for key in external_user_model.subscribers:
                youtify_user_model = db.get(key)
                json.append(get_youtify_user_struct(youtify_user_model))

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(simplejson.dumps(json))
Пример #10
0
    def get(self, type, external_user_id):
        """Gets the subscribers of an external user"""
        external_user_model = ExternalUser.all().filter('type =', type).filter(
            'external_user_id =', external_user_id).get()
        json = []

        if external_user_model is not None:
            for key in external_user_model.subscribers:
                youtify_user_model = db.get(key)
                json.append(get_youtify_user_struct(youtify_user_model))

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(simplejson.dumps(json))
Пример #11
0
def import_followings(external_user_id):
    url = "http://api.soundcloud.com/users/%s/followings.json?client_id=%s" % (
        external_user_id, '206f38d9623048d6de0ef3a89fea1c4d')
    result = urlfetch.fetch(url)
    result = simplejson.loads(result.content)
    for user in result:
        if ExternalUser.all().filter('type =', 'soundcloud').filter(
                'external_user_id =', str(user['id'])).get() is None:
            external_user_model = ExternalUser(type='soundcloud',
                                               external_user_id=str(
                                                   user['id']))
            external_user_model.username = user['permalink']
            external_user_model.avatar_url = user['avatar_url']
            external_user_model.save()
Пример #12
0
 def get(self, max):
     """Gets a list of external users"""
     page = int(self.request.get('page', '0'))
     page_size = int(max)
     
     json = memcache.get('TopExternalUsers-' + str(page_size) + '*' + str(page))
     
     if json is None:
         users = ExternalUser.all().order('-nr_of_subscribers').fetch(page_size, page_size * page)
         json = []
         for user in users:
             json.append(get_external_user_subscription_struct(user))
         json = simplejson.dumps(json)
         memcache.set('TopExternalUsers-' + str(page_size) + '*' + str(page), json, 60*5)
     
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(json)
Пример #13
0
 def delete(self, type, external_user_id):
     """Unsubscribes from an external user"""
     youtify_user_model = get_current_youtify_user_model()
     if youtify_user_model == None:
         self.error(403)
         return
     
     external_user_model = ExternalUser.all().filter('type =', type).filter('external_user_id =', external_user_id).get()
     
     youtify_user_model.external_user_subscriptions.remove(external_user_model.key())
     youtify_user_model.save()
     
     external_user_model.subscribers.remove(youtify_user_model.key())
     external_user_model.nr_of_subscribers = len(external_user_model.subscribers)
     external_user_model.save()
     
     self.response.headers['Content-Type'] = 'text/plain'
     self.response.out.write('ok')
Пример #14
0
    def get(self):
        external_users = ExternalUser.all().filter(
            'get_last_updated =',
            True).order('last_checked').order('-nr_of_subscribers').fetch(50)
        for external_user in external_users:
            external_user.last_checked = datetime.now()
            external_user.save()

            if external_user.type == 'soundcloud':
                try:
                    last_date = datetime.fromtimestamp(0)
                    url = 'http://api.soundcloud.com/users/' + external_user.external_user_id + '/tracks.json?consumer_key=' + config.SOUNDCLOUD_CONSUMER_KEY
                    response = urlfetch.fetch(url=url, method=urlfetch.GET)
                    if response.status_code == 200:
                        tracks = simplejson.loads(response.content)
                        for track in tracks:
                            date_temp = datetime.fromtimestamp(0)
                            if 'created_at' in track:
                                date_temp = parser.parse(track['created_at'])
                            if date_temp.time() > last_date.time():
                                last_date = date_temp
                        if last_date.time() > datetime.fromtimestamp(
                                0).time() and last_date.time(
                                ) != external_user.last_updated.time():
                            external_user.last_updated = last_date
                            external_user.save()
                except:
                    pass

            if external_user.type == 'youtube':
                try:
                    url = 'https://gdata.youtube.com/feeds/api/users/' + external_user.external_user_id + '/uploads?alt=json&v=2'
                    response = urlfetch.fetch(url=url, method=urlfetch.GET)
                    logging.info(response.status_code)
                    if response.status_code == 200:
                        tracks = simplejson.loads(response.content)
                        updated = tracks['feed']['published']['$t']
                        last_date = parser.parse(updated)
                        if last_date.time() != external_user.last_updated.time(
                        ):
                            external_user.last_updated = last_date
                            external_user.save()
                except:
                    pass
Пример #15
0
    def get(self):
        global flattr_thing_cache
        page = int(self.request.get("page", "0"))
        page_size = 30
        count = 0

        #### START MIGRATION CODE ####

        for m in ExternalUser.all().filter("type =", "soundcloud").fetch(page_size, page_size * page):
            count += 1
            import_followings(m.external_user_id)

        #### END MIGRATION CODE ####

        self.response.headers["Content-Type"] = "text/html"
        if count < page_size:
            self.response.out.write(Template(COMPLETE).substitute({"count": count}))
        else:
            self.response.out.write(Template(TEMPLATE).substitute({"progress": page_size * page, "next": page + 1}))
Пример #16
0
    def get(self):
        user = get_current_youtify_user_model()

        if ON_PRODUCTION:
            return

        for type, username in EXTERNAL_USERS:
            url = 'http://soundcloud.com/' + username
            response = urlfetch.fetch(
                'https://api.soundcloud.com/resolve.json?consumer_key=206f38d9623048d6de0ef3a89fea1c4d&url='
                + url)
            response = simplejson.loads(response.content)
            external_user_model = ExternalUser(
                type=type,
                external_user_id=str(response['id']),
                username=username,
                avatar_url=response['avatar_url'])
            external_user_model.save()
            user.external_user_subscriptions.append(external_user_model.key())
            user.save()
            external_user_model.subscribers.append(user.key())
            external_user_model.save()

        self.redirect('/')
        return

        for i in range(0, 50):
            tracks_json = []
            for j in range(0, 100):
                tracks_json.append({
                    "videoId": 27985183,
                    "title": "Oceanic Crust",
                    "duration": 106331,
                    "type": "soundcloud"
                })
            m = Playlist(owner=user,
                         title="Mosaik " + str(i),
                         tracks_json=simplejson.dumps(tracks_json),
                         json=None)
            m.put()

            user.playlists.append(m.key())
            user.save()

        self.redirect('/')
Пример #17
0
    def get(self, max):
        """Gets a list of external users"""
        page = int(self.request.get('page', '0'))
        page_size = int(max)

        json = memcache.get('TopExternalUsers-' + str(page_size) + '*' +
                            str(page))

        if json is None:
            users = ExternalUser.all().order('-nr_of_subscribers').fetch(
                page_size, page_size * page)
            json = []
            for user in users:
                json.append(get_external_user_subscription_struct(user))
            json = simplejson.dumps(json)
            memcache.set(
                'TopExternalUsers-' + str(page_size) + '*' + str(page), json,
                60 * 5)

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(json)
Пример #18
0
def import_followings(external_user_id):
    url = "http://api.soundcloud.com/users/%s/followings.json?client_id=%s" % (
        external_user_id,
        "206f38d9623048d6de0ef3a89fea1c4d",
    )
    result = urlfetch.fetch(url)
    result = simplejson.loads(result.content)
    for user in result:
        if (
            ExternalUser.all().filter("type =", "soundcloud").filter("external_user_id =", str(user["id"])).get()
            is None
        ):
            external_user_model = ExternalUser(type="soundcloud", external_user_id=str(user["id"]))
            external_user_model.username = user["permalink"]
            external_user_model.avatar_url = user["avatar_url"]
            external_user_model.save()
Пример #19
0
 def get(self):
     external_users = ExternalUser.all().filter('get_last_updated =', True).order('last_checked').order('-nr_of_subscribers').fetch(50)
     for external_user in external_users:
         external_user.last_checked = datetime.now()
         external_user.save()
         
         if external_user.type == 'soundcloud':
             try:
                 last_date = datetime.fromtimestamp(0)
                 url = 'http://api.soundcloud.com/users/' + external_user.external_user_id + '/tracks.json?consumer_key=206f38d9623048d6de0ef3a89fea1c4d'
                 response = urlfetch.fetch(url=url, method=urlfetch.GET)
                 if response.status_code == 200:
                     tracks = simplejson.loads(response.content)
                     for track in tracks:
                         date_temp = datetime.fromtimestamp(0)
                         if 'created_at' in track:
                             date_temp = parser.parse(track['created_at'])
                         if date_temp.time() > last_date.time():
                             last_date = date_temp
                     if last_date.time() > datetime.fromtimestamp(0).time() and last_date.time() != external_user.last_updated.time():
                         external_user.last_updated = last_date
                         external_user.save()
             except:
                 pass
         
         if external_user.type == 'youtube':
             try:
                 url = 'https://gdata.youtube.com/feeds/api/users/' + external_user.external_user_id + '/uploads?alt=json&v=2'
                 response = urlfetch.fetch(url=url, method=urlfetch.GET)
                 logging.info(response.status_code)
                 if response.status_code == 200:
                     tracks = simplejson.loads(response.content)
                     updated = tracks['feed']['published']['$t']
                     last_date = parser.parse(updated)
                     if last_date.time() != external_user.last_updated.time():
                         external_user.last_updated = last_date
                         external_user.save()
             except:
                 pass
Пример #20
0
 def post(self, type, external_user_id):
     """Marks the external user as viewed"""
     youtify_user_model = get_current_youtify_user_model()
     if youtify_user_model == None:
         self.response.out.write('user not logged in')
         logging.info('user not logged in')
         self.error(403)
         return
     
     external_user_model = ExternalUser.all().filter('type =', type).filter('external_user_id =', external_user_id).get()
     if external_user_model == None:
         logging.info('external user ' + external_user_id + ' not found')
         self.response.out.write('external user ' + external_user_id + ' not found')
         self.error(404)
         return
     external_user_timestamp = ExternalUserTimestamp.all().filter('external_user ='******'user ='******'ok')
Пример #21
0
    def get(self):
        user = get_current_youtify_user_model()

        if ON_PRODUCTION:
            return

        for type, username in EXTERNAL_USERS:
            url = "http://soundcloud.com/" + username
            response = urlfetch.fetch(
                "https://api.soundcloud.com/resolve.json?consumer_key=206f38d9623048d6de0ef3a89fea1c4d&url=" + url
            )
            response = simplejson.loads(response.content)
            external_user_model = ExternalUser(
                type=type, external_user_id=str(response["id"]), username=username, avatar_url=response["avatar_url"]
            )
            external_user_model.save()
            user.external_user_subscriptions.append(external_user_model.key())
            user.save()
            external_user_model.subscribers.append(user.key())
            external_user_model.save()

        self.redirect("/")
        return

        for i in range(0, 50):
            tracks_json = []
            for j in range(0, 100):
                tracks_json.append(
                    {"videoId": 27985183, "title": "Oceanic Crust", "duration": 106331, "type": "soundcloud"}
                )
            m = Playlist(owner=user, title="Mosaik " + str(i), tracks_json=simplejson.dumps(tracks_json), json=None)
            m.put()

            user.playlists.append(m.key())
            user.save()

        self.redirect("/")
Пример #22
0
    def post(self, type, external_user_id):
        """Subscribes to an external user"""
        youtify_user_model = get_current_youtify_user_model()
        if youtify_user_model == None:
            self.error(403)
            return
        
        external_user_model = ExternalUser.all().filter('type =', type).filter('external_user_id =', external_user_id).get()
        if external_user_model is None:
            external_user_model = ExternalUser(type=type, external_user_id=external_user_id) 

            # @XXX should not trust client with this information, fetch from server instead
            external_user_model.username = self.request.get('username')
            external_user_model.avatar_url = self.request.get('avatar_url')
            external_user_model.get_last_updated = True

            external_user_model.save()
        
        if external_user_model.key() in youtify_user_model.external_user_subscriptions:
            self.error(400)
            self.response.out.write('You already subscribe to this external user')
            return
            
        youtify_user_model.external_user_subscriptions.append(external_user_model.key())
        youtify_user_model.save()
        
        external_user_model.subscribers.append(youtify_user_model.key())
        external_user_model.nr_of_subscribers = len(external_user_model.subscribers)
        external_user_model.get_last_updated = True
        external_user_model.save()

        create_external_subscribe_activity(youtify_user_model, external_user_model)
        
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('ok')
Пример #23
0
    def post(self, type, external_user_id):
        """Subscribes to an external user"""
        youtify_user_model = get_current_youtify_user_model()
        if youtify_user_model == None:
            self.error(403)
            return

        external_user_model = ExternalUser.all().filter('type =', type).filter(
            'external_user_id =', external_user_id).get()
        if external_user_model is None:
            external_user_model = ExternalUser(
                type=type, external_user_id=external_user_id)

            # @XXX should not trust client with this information, fetch from server instead
            external_user_model.username = self.request.get('username')
            external_user_model.avatar_url = self.request.get('avatar_url')

            external_user_model.save()

        if external_user_model.key(
        ) in youtify_user_model.external_user_subscriptions:
            self.error(400)
            self.response.out.write(
                'You already subscribe to this external user')
            return

        youtify_user_model.external_user_subscriptions.append(
            external_user_model.key())
        youtify_user_model.save()

        external_user_model.subscribers.append(youtify_user_model.key())
        external_user_model.nr_of_subscribers = len(
            external_user_model.subscribers)
        external_user_model.save()

        create_external_subscribe_activity(youtify_user_model,
                                           external_user_model)

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('ok')