Example #1
0
def auth():
    scope = LAST_SCOPETS
    if not USE_API_RELAY:
        (token, uid, secret) = vk_auth.auth(LOGIN, PASS, APPID,
                                            scope + ",nohttps")
        agent = vkontakte.API(token=token, api_secret=secret)
    else:
        rsf = RELAY_SOCK_FILE
        rsf.write('LOG1\n%s %s %s\n' % (LOGIN, PASS, APPID))
        rsf.flush()
        rsf.write(scope + '\n')
        rsf.flush()
        rld = rsf.readline().strip()
        token, uid, secret = rld.split(' ')
        agent = vkontakte.API()
    return token, uid, secret, agent
Example #2
0
def vkgrouppost(filename, text):
    vk = vkontakte.API(token=VKTOKEN)
    upurl = vk.get('photos.getWallUploadServer',gid=GROUPID)['upload_url']
    r = requests.post(upurl, files={'photo': open(filename, 'rb')}).json()
    ph = vk.get('photos.saveWallPhoto',server=r['server'],photo=r['photo'],hash=r['hash'],gid=GROUPID)
    attach = ph[0]['id']
    vk.get('wall.post',owner_id=0-GROUPID,message=text,attachments=attach,from_group=1)
Example #3
0
    def __init__(self, tok, log=1, loggerObject=None):
        self.logFile2 = None
        self.logFile2str = None
        self.vk = vkontakte.API(token=tok)
        self.__warmingUpCache()
        self.logtxt = log
        if loggerObject is None:
            loggerObject = logger()
        self.logger = loggerObject
        from app.core.socialAnalyzer import socialAnalyze

        from app.core.utilites import utilites
        args = {
            u'vk': self.vk,
            u'logtxt': self.logtxt,
            u'logger': self.logger,
            u'cacheLogFile': self.cacheLogFile,
            u'logFile2': self.logFile2,
            u'logFile2str': self.logFile2str
        }
        args[u'api'] = vkapi(args)

        self.api = vkapi(
            args)  #свои набор, для часто применяемых методов запросов к api vk
        self.social = socialAnalyze(
            args)  #класс для социвального анализа в вк по теме
        self.ut = utilites(args)
        self.timeForLastRequest = time.time()
        self.social.ut = self.ut
Example #4
0
 def handle(self, *args, **options):
     vk = vkontakte.API(settings.VK_APP_ID, settings.VK_APP_SECRET)
     for user in User.objects.all():
         if user.is_vk_user():
             vk_profile = user.vk_profile
             new_data = vk.getProfiles(uids=str(user.username),
                                       fields=','.join(FIELDS))[0]
             for field in FIELDS:
                 if field == 'city':
                     try:
                         vk_profile.city = new_data[field]
                     except:
                         pass
                 elif field == 'country':
                     try:
                         vk_profile.country = new_data[field]
                     except:
                         pass
                 elif field == 'first_name' or field == 'last_name':
                     try:
                         setattr(user, field, new_data[field])
                     except:
                         pass
                 else:
                     try:
                         setattr(vk_profile, field, new_data[field])
                     except:
                         pass
             vk_profile.save()
             user.save()
             print user.get_full_name()
             time.sleep(0.34)
Example #5
0
    def fetch_friends(self, user):
        """
        fethces friends from VKontakte using the access_token
        fethched by django-social-auth.

        Note - user isn't a user - it's a UserSocialAuth if using social auth, or a SocialAccount if using allauth

        Returns:
            collection of friend objects fetched from VKontakte
        """

        if USING_ALLAUTH:
            raise NotImplementedError(
                "VKontakte support is not implemented for django-allauth")
            #social_app = SocialApp.objects.get_current('vkontakte')
            #oauth_token = SocialToken.objects.get(account=user, app=social_app).token
        else:
            social_auth_backend = VKOAuth2Backend()

            # Get the access_token
            tokens = social_auth_backend.tokens(user)
            oauth_token = tokens['access_token']

        api = vkontakte.API(token=oauth_token)
        return api.get("friends.get")
 def _patch_request_with_vkapi(self, request):
     """
     Помещает в request.vk_api экземпляр vkontakte.API с настроенной
     авторизацией.
     """
     if use_vkontakte_pkg and hasattr(request, 'session'):
         if 'vk_startup_vars' in request.session:
             token = request.session['vk_startup_vars']['access_token']
             request.vk_api = vkontakte.API(token=token)
Example #7
0
 def load_from_vkontakte(self, request, queryset):
     import vkontakte
     api = vkontakte.API(settings.VK_APP_ID,
                         settings.VK_APP_SECRET,
                         timeout=5)
     cids = ','.join([str(city.pk) for city in queryset])
     vk_data = api.getCities(cids=cids)
     for item in vk_data:
         city = City.objects.get(pk=item['cid'])
         city.title = item['name']
         city.save()
Example #8
0
def get_api(used_access_tokens=None, *args, **kwargs):
    '''
    Return API instance with latest token from database
    '''
    if ACCESS_TOKEN:
        token = ACCESS_TOKEN
    else:
        tokens = AccessToken.objects.filter_active_tokens_of_provider('vkontakte', *args, **kwargs)
        if used_access_tokens:
            tokens = tokens.exclude(access_token__in=used_access_tokens)

        if len(tokens) == 0:
            raise NoActiveTokens("There is no active AccessTokens with args %s and kwargs %s" % (args, kwargs))
        else:
            token = tokens[0].access_token

    return vkontakte.API(token=token)
Example #9
0
def session(sock, addr):
	sock.send("\n")
	cf = sock.makefile()
	while 1:
		c = cf.readline().strip()
		if c == 'LOG1':
			logstr = cf.readline().strip()
			uid, passwd, appid = logstr.split(' ')
			scope = cf.readline().strip()+',nohttps'
			token, uid, secret = vk_auth.auth(uid, passwd, appid, scope)
			cf.write('%s\n'%(' '.join((token, uid, secret))))
			cf.flush()
			vk_api = vkontakte.API(token=token, api_secret=secret)
		elif c == 'REQE':
			method = cf.readline().strip()
			cf.write('OK\n')
			cf.flush()
			kwargs = {}
			while 1:
				c2 = cf.readline().strip()
				if c2 == 'PARA':
					key = cf.readline().strip()
					leng = int(cf.readline().strip())
					value = cf.read(leng).strip()
					kwargs[key]=value
				elif c2 == 'ENDP':
					kwargs['method']=method
					kwargs['raw']=1
					resp = json.dumps(vk_api.__call__(**kwargs))
					cf.write('ANSW\n')
					cf.write('%d\n'%len(resp))
					cf.write(resp)
					cf.flush()
					break
		elif c == 'QUIT':
				sock.close()
				return
	sock.close()
Example #10
0
def get_connection_values(response, **kwargs):
    if not response:
        return None

    access_token = response['access_token']
    vk = vkontakte.API(token=access_token)
    profile = vk.getProfiles(
        uids=response['user_id'],
        fields='first_name,last_name,photo_100,screen_name')[0]

    profile_url = "http://vk.com/id%s" % response['user_id']
    fullname = u'%s %s' % (profile['first_name'], profile['last_name'])
    return dict(
        provider_id=config['id'],
        provider_user_id=str(profile['uid']),
        access_token=access_token,
        secret=None,
        display_name=profile.get('screen_name', fullname),
        full_name=fullname,
        profile_url=profile_url,
        image_url=profile.get('photo_100'),
        email='',
    )
Example #11
0
__copyright__ = "Copyright 2013, GDG Omsk"
__email__ = "*****@*****.**"
__license__ = 'Apache License, Version 2.0'
__version__ = '0.1a'

import time
import webapp2
import vkontakte
from apiclient.discovery import build

import constants
import constants_secret
from model import CrossPostedToVK

plus = build('plus', 'v1', developerKey=constants_secret.GOOGLE_PLUS_API_KEY)
vk = vkontakte.API(token=constants_secret.VKONTAKTE_EKATERINA_LUBIMOVA_TOKEN)

class MainHandler(webapp2.RequestHandler):
    """ Обработчик для кросс-постинга постов из g+ в вконтакте. 
        Учитываются только последние 20 постов. Каждый пост перепостчивается только один раз, независимо от кол-ва вызовов обработчика"""

    def get(self):
        response = self.fetch_last_posts()

        self.cross_post_to_vk(response)

        self.response.write("200 OK")

    def fetch_last_posts(self):
        request = plus.activities().list(userId=constants.GOOGLE_PLUS_GDG_OMSK_ID,
            collection='public',
Example #12
0
 def test_timeout(self, post):
     post.return_value = 200, '{"response":123}'
     api = vkontakte.API(API_ID, API_SECRET, timeout=5)
     res = api.getServerTime()
     self.assertEqual(res, 123)
     self.assertEqual(post.call_args[0][3], 5)
Example #13
0
 def setUp(self):
     self.api = vkontakte.API(API_ID, API_SECRET)
Example #14
0
 def test_api_creation_error(self):
     self.assertRaises(ValueError, lambda: vkontakte.API())
Example #15
0
 def vk(self):
     """VK api property"""
     if not self._vk:
         token = keyring.get_password('vkvideo-lens', 'access_token')
         self._vk = vkontakte.API(token=token) if token else None
     return self._vk
Example #16
0
def Init():
    vk = vkontakte.API('##id##', '###token####')
    return vk
Example #17
0
    graph.add_edges_from(gd_accumulator['edges'])

    # Disable profiling
    if time_profiler:
        time_profiler.disable()

    return graph


DESCRIPTION = 'Get information about friends of user ' \
              'with specified UID in social network vk.com'

TOKEN_VK = '2e27464b84d9a9833248daa69ac07ec4e9ef98a05' \
           '1ad62dd18dc4a51513281a8de4249170a575d40f1332'

VK = vkontakte.API(token=TOKEN_VK)

DEFAULT_ATTRIBUTES = ['first_name', 'last_name', 'sex']

time_profiler = None

if __name__ == '__main__':
    # set cli options
    parser = argparse.ArgumentParser(description=DESCRIPTION)
    parser.add_argument('uids',
                        metavar='UID',
                        type=int,
                        nargs='+',
                        help='UID of vk.com user.')
    parser.add_argument('-w',
                        '--write-to',
Example #18
0
import csv
import json

import vkontakte

# First, authenticate with app (see readme for reference)
with open('resources/token.json') as data_file:
    data = json.load(data_file)
token = data['token']
vk = vkontakte.API(token=token)

# Some demo functions for debug
# print vk.getServerTime()
# var = vk.get('getProfiles', uids='1,2')
# var = vk.get('friends.get', fields='name')


# Method for working with russian text
def write_unicode(text, charset='utf-8'):
    return text.encode(charset)


def get_friends_phones():
    """
    This method gets the friends list of the user currently authenticated using API and stores it into
    friends.csv file along with the friend's phone numbers.
    :return: 
    """
    cont = vk.get('friends.get', fields='contacts')
    f = csv.writer(open("friends.csv", "wb+"))
    f.writerow(["name", "surname", "home_phone", "mobile"])
Example #19
0
def main():

    if (options.gid == None):
        print "set group id ( use -h for help) "
        exit(1)
    if (options.email == None):
        print "set Email ( use -h for help ) "
        exit(1)
    if (options.passwd == None):
        options.passwd = getpass.getpass("Enter your password:"******"*" * len(options.passwd), options.app_id)
    print greeting
    (token, user_id) = vk_auth.auth(options.email, options.passwd,
                                    options.app_id, 'friends')
    vk = vkontakte.API(token=token)
    server_time = vk.getServerTime()  #check working
    if (server_time):
        group_info = groups_getById(vk, group_ids=options.gid)
        name = group_info[0]["name"]
        print "Auth is success, for ", name
        try:
            os.mkdir(FOLDER_RESULT +
                     name)  # make the directory with the name of the publick

        except (OSError):
            print "Directory Exist"
        ava = "ava.jpg"
        vk_link = "vk_link.png"
        vk_audio = "vk_audio.jpg"
        vk_video = "vk_video.jpg"
        shutil.copyfile(FOLDER_SERVICE + ava,
                        FOLDER_RESULT + "%s/%s" % (name, ava))
        shutil.copyfile(FOLDER_SERVICE + vk_link,
                        FOLDER_RESULT + "%s/%s" % (name, vk_link))
        shutil.copyfile(FOLDER_SERVICE + vk_video,
                        FOLDER_RESULT + "%s/%s" % (name, vk_video))
        shutil.copyfile(FOLDER_SERVICE + vk_audio,
                        FOLDER_RESULT + "%s/%s" % (name, vk_audio))
        if (options.count == None):
            temp = get_posts(vk, -int(options.gid), 0, 1)
            print "Post count = ", temp[0]
            count = temp[0]
        else:
            count = int(options.count)
        tom_count = int(options.split)
        offset = int(
            options.offset
        )  # frow where gell posts. This value will be chaged by iterations
        posts_by_tom = count / tom_count
        iteration = 0  #global iteration
        curr_tom = 0
        iteration = 1
        tom_iteration = 0  # curr count of posts in current tom
        step = 90
        downloaded = 0
        print posts_by_tom
        name_tom = "%s_%i.html" % (name, curr_tom)
        tom_file = open(FOLDER_RESULT + "%s/%s" % (name, name_tom),
                        'w+')  # open first tom file
        tom_file.write(page_begin.encode('utf-8'))
        while (iteration * step < count):
            if (tom_iteration * step >= posts_by_tom):
                tom_file.close()
                tom_iteration = 0
                curr_tom += 1
                name_tom = "%s_%i.html" % (name, curr_tom)
                tom_file = open(FOLDER_RESULT + "%s/%s" % (name, name_tom),
                                'w+')  # open cur tom file
                tom_file.write(page_begin.encode('utf-8'))
            posts = get_posts(vk, -int(options.gid), offset, step)
            downloaded += len(posts) - 1
            print "Скачано:", downloaded
            posts_html = posts_to_html(vk, posts)
            tom_file.write(posts_html.encode('utf-8'))
            iteration += 1
            tom_iteration += 1
            offset += step
        tom_file.close()

        if (options.download_all == '1'):
            for i in range(curr_tom + 1):
                name_cur = "%s_%i.html" % (name, i)
                long_name = FOLDER_RESULT + "%s/%s" % (name, name_cur)
                folder = "%s_%sdata/" % (name, i)
                long_folder = FOLDER_RESULT + "%s/%s" % (name, folder)
                tom_file = codecs.open(long_name, "r", "utf-8")
                converted = FOLDER_RESULT + "%s/%s_%s_converted.html" % (
                    name, name, i)
                print converted
                converted = open(converted, 'w+')
                data = tom_file.read()
                download_media(long_name,
                               FOLDER_RESULT + "%s/%s" % (name, folder))
                new_data = convert_links(data, "./%s" % folder)
                #tom_file.seek(0)
                converted.write(new_data.encode("utf-8"))
                tom_file.close()
                converted.close()
    return 0
Example #20
0
def get_friends(user):
    if user.is_vk_user():
        vk = vkontakte.API(settings.VK_APP_ID, settings.VK_APP_SECRET)
        friends = vk.friends.get(uid=user.username)
        friends = map(str, friends)
        return User.objects.filter(username__in=friends)
Example #21
0
def get_api(connection, **kwargs):
    return vkontakte.API(
        api_id=kwargs.get('consumer_key'),
        api_secret=kwargs.get('consumer_secret')
    )
Example #22
0
from django.template import RequestContext
from django.shortcuts import render_to_response
import vkontakte
from settings import APP_ID, APP2_ID, APP2_KEY, APP2_TOKEN, USER1_ID, USER2_ID

vk = vkontakte.API(APP_ID, token=APP2_TOKEN, timeout=5)


def home(request):
    app_id = APP2_ID
    settings = "friends"
    my_friends = set(vk.friends.get(uid=USER1_ID))
    my_requests = set(vk.friends.getRequests(uid=USER1_ID, out=1))
    sempo_friends = set(vk.friends.get(uid=USER2_ID))
    missing_friends = sempo_friends - (my_friends | my_requests)
    print "Friends: %d" % len(my_friends)
    print "Requests: %d" % len(my_requests)
    print "Sempo friends: %d" % len(sempo_friends)
    print "Common: %d" % len(missing_friends)

    context = {
        'app_id': app_id,
        'settings': settings,
        'friends': missing_friends,
    }

    return render_to_response("index.html",
                              context,
                              context_instance=RequestContext(request))
Example #23
0
import httplib
import re
import vkontakte
import sys
sys.path.append('../../uglyweb/')
from uglyweb import settings

vk = vkontakte.API(settings.VK_ID, settings.VK_SECRET)


class ProfileNotFound(Exception):
    def __init__(self, name):
        self.name = name
        super(ProfileNotFound, self).__init__()

    def __repr__(self):
        return 'Profile with data: %s not found!' % self.name


def get_profile(name):
    """Get profile from VK api"""
    try:
        return vk.getProfiles(uids=name,
            fields='uid, first_name, last_name, photo, screen_name'
        )[0]
    except IndexError:
        raise ProfileNotFound(name)


def check_url(addr, name):
    """Check url exist"""
Example #24
0
def fill_db(db_name):
    conn = sqlite3.connect(db_name)
    c = conn.cursor()
    try:
        c.execute("""CREATE TABLE girls (
                      id    integer primary key autoincrement,
                      name          text,
                      city          text,
                      age           int,
                      link          text,
                      likes         int,
                      date          int,
                      reply_count   int,
                      reposts_count int,
                      parse_date    int,
                      rating        float,
                      page_url      text
                      )
                  """)
        c.execute("""CREATE TABLE photos (
                      id      integer primary key autoincrement,
                      id_girl int,
                      url     text,
                      likes   int)
                  """)
    except sqlite3.OperationalError:
        pass

    # vk = vkontakte.API(APP_ID, APP_SECRET)
    vk = vkontakte.API(token=ACCESS_TOKEN)

    offset = 0
    girls_count = 0
    date_now = int(time.time())

    while True:
        girls = vk.wall.get(owner_id='-37862023', offset=offset, count=100)
        offset += 100

        for _post in girls:
            if not isinstance(_post, dict):
                continue
            girls_count += 1

            # original post url
            page_url = "http://vk.com/wall{}_{}".format(
                _post['from_id'], _post['id'])

            likes = _post['likes']['count']
            date = int(_post['date'])
            reply_count = int(_post['reply_count'])
            reposts_count = int(_post['reposts']['count'])
            post_text = _post['text']

            # skip videos and another non-photo posts
            try:
                if _post['media']['type'] != u'photo':
                    continue
            except KeyError as e:
                log.info("Content type is {}".format(e))

            # parse post text to fill db by additional info
            # TODO: mb use regexp
            name, city, age, link = 'None', 'None', 0, 'None'

            _name, _br = post_text.find('Name:'), post_text.find('<br>')
            if _name != -1 and _br != -1:
                name = post_text[_name + 6:_br]

            post_text = post_text[_br + 4:]
            _city, _br = post_text.find('City:'), post_text.find('<br>')
            if _city != -1 and _br != -1:
                city = post_text[_city + 6:_br]

            post_text = post_text[_br + 4:]
            _age, _br = post_text.find('Age:'), post_text.find('<br>')
            if _age != -1 and _br != -1:
                try:
                    age = int(post_text[_age + 5:_br])
                except Exception:
                    age = 0

            post_text = post_text[_br + 4:]
            _link = post_text.find('Link:')
            if _link != -1:
                link = post_text[_link + 6:]

            # create girl rating
            rating = float(likes + reply_count + reposts_count) * 10000
            rating /= (date_now - date)

            # fill db
            c.execute("""UPDATE girls
                         SET age='%d', link='%s', likes='%d', date='%d',
                             reply_count='%d', reposts_count='%d',
                             parse_date='%d', rating='%.2f'
                         WHERE page_url='%s'
                      """ % (age, link, likes, date, reply_count,
                             reposts_count, date_now, rating, page_url))
            # if update was successfull rowcount != 0
            # if rowcount == 0 then there is no girl from the 'page_url'
            if c.rowcount == 0:
                c.execute("""INSERT INTO girls
                                (name, city, age, link, likes, date,
                                 reply_count, reposts_count, parse_date,
                                 rating, page_url)
                             VALUES ('%s', '%s', '%d', '%s', '%d',
                                     '%d', '%d', '%d', '%d', '%.2f', '%s')
                          """ %
                          (name, city, age, link, likes, date, reply_count,
                           reposts_count, date_now, rating, page_url))
                log.info("Girl was added to the db")
            else:
                log.info("Girls info was updated")

            girls_id = c.lastrowid
            # if girls_id is None - girl info was updated
            # lets think that there are no new photos in updates
            if girls_id:
                try:
                    for _photo in _post['attachments']:
                        photo = 'None'
                        try:
                            photo = _photo['photo']['src_big']
                            photo = _photo['photo']['src_xbig']
                            photo = _photo['photo']['src_xxbig']
                        except KeyError as exception:
                            log.warning(
                                "Girl ID: {}. There is no {} type".format(
                                    girls_id, exception))

                        c.execute("""INSERT INTO photos (id_girl, url, likes)
                                     VALUES (%d, '%s', %d)
                                  """ % (girls_id, photo, likes))

                except KeyError as e:
                    log.warning(
                        "KeyError: there is no {} for this post".format(e))

            conn.commit()

        if offset > girls[0]:
            break

        time.sleep(2.0)

    c.close()