Python script retrieves my vk news feed

import cookielib
import urllib
import urllib2

from urlparse import urlparse
from HTMLParser import HTMLParser


class VKAuthFormContentHandler(HTMLParser):

    def __init__(self, *args, **kwargs):
        HTMLParser.__init__(self, *args, **kwargs)
        self._inside_form = False
        self.form_action = ''
        self.form_data = {}

    def handle_starttag(self, tag, attrs):
        if tag.lower() == 'form':
            attrs_dict = dict(attrs)
            if attrs_dict.get('method', '').lower() != 'post':
                return
            self.form_action = attrs_dict.get('action')
            self.form_method = attrs_dict.get('method')
            self._inside_form = True
        elif self._inside_form and tag.lower() == 'input':
            attrs_dict = dict(attrs)
            if ('name' not in attrs_dict) or (attrs_dict.get('type', '') not in ['hidden', 'text', 'password']):
                return
            self.form_data[attrs_dict['name']] = attrs_dict.get('value', '')

    def handle_endtag(self, tag):
        if tag.lower() == 'form':
            self._inside_form = False


class VKAuth(object):

    VK_AUTH_REDIRECT_URL = 'http://oauth.vk.com/blank.html'
    VK_AUTH_URL = "http://oauth.vk.com/oauth/authorize?redirect_uri={redirect_uri}&response_type=token&client_id={client_id}&scope={scope}&display=wap"

    _parser = VKAuthFormContentHandler()

    def login(self, app_id, user_email, user_secret, scope=['friends', 'offline', 'wall', 'photos']):
        opener = urllib2.build_opener(
            urllib2.HTTPCookieProcessor(cookielib.CookieJar()),
            urllib2.HTTPRedirectHandler())
        response = opener.open(self.VK_AUTH_URL.format(
            client_id=VK_APP_ID,
            scope=','.join(scope),
            redirect_uri=self.VK_AUTH_REDIRECT_URL)).read()
        self._parser.feed(response)
        data = self._parser.form_data
        action = self._parser.form_action
        data['email'] = VK_USER_EMAIL
        data['pass'] = VK_USER_SECRET
        response = opener.open(action, urllib.urlencode(data))
        if (
                urlparse(response.geturl()).path !=
                urlparse(self.VK_AUTH_REDIRECT_URL).path):
            # give access
            self._parser.data = {}
            self._parser.feed(response.read())
            response = opener.open(
                self._parser.form_action,
                urllib.urlencode(self._parser.form_data))
        user_id = None
        access_token = None
        for part in urlparse(response.geturl()).fragment.split('&'):
            parts = part.split('=')
            if len(parts) != 2:
                continue
            if parts[0] == 'user_id':
                user_id = parts[1]
            elif parts[0] == 'access_token':
                access_token = parts[1]
        return (user_id, access_token)


if __name__ == '__main__':
    VK_USER_EMAIL = '***'
    VK_USER_SECRET = '***'
    VK_APP_ID = '***'
    user_id, access_token = VKAuth().login(
        app_id=VK_APP_ID,
        user_email=VK_USER_EMAIL,
        user_secret=VK_USER_SECRET)
    url = 'https://api.vk.com/method/{method}?{args}'.format(
        method='newsfeed.get',
        args=urllib.urlencode({'access_token': access_token}))
    print urllib2.urlopen(url).read()
    # {"response":{"items":[{"type":"wall_photo","source_id" ...

Links:

Licensed under CC BY-SA 3.0