[Instagram] Карта фотографий

Discussion in 'Социальные сети' started by <Cyber-punk>, 25 Jun 2015.

  1. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Доброго времени суток всем.

    Написал небольшой скрипт, который пробегается по всем фотографиям заданного пользователя и генерирует Yandex-карту со всеми фотографиями, у которых было задано местоположение.

    Тут надо отметить одну интересную особенность инстаграма. При выборе фотографии, если инстаграм находит на ней геотеги, то он автоматически выставляет флажок добавления этой фотки на карту, но если пользователь никак не называет это место, то и над фотографией в ленте не будет отображаться, что фото сделано из такого-то места. Таким образом, если пользователь никак не называет место, где была произведена фотка, но не снимает галочку добавления на карту, то никто из просто интерфейса и не увидит, что у фотографии есть геоданные.

    Если говорить техническим языком, то такие фотографии имеют location.id равный нулю. Скрипт поможет выделить такие точки и обозначить их на карте особой меткой, тк они интересуют больше всего. Если пользователь не очень шарит в приложениях, то вполне легко можно узнать где он живет и тд.

    Сам скрипт будет являться частью одного большого проекта, но использовать его можно уже сейчас.

    Репозиторий на гитхабе: https://github.com/cyberpunkych/SmallSocialParser

    Установка доп. компонентов для работы скрипта:
    Code:
    $ sudo pip install python-instagram
    $ sudo pip install requests
    Использование:
    Code:
    $ python inst_place.py username
    Code:
    #!/usr/bin/python
    
    from instagram.client import InstagramAPI
    import sys
    import re
    import requests
    from datetime import date
    import time
    import codecs
    import urllib
    
    
    api = InstagramAPI(client_id='4412fd0dc9f04234bc7ed93a85463502', client_secret='e155859592c84346ab775f4d0b0e000e')
    
    map_html="""
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
        <script type="text/javascript">
            ymaps.ready(init);
            var myMap,
                myPlacemark;
    
            function init(){
                myMap = new ymaps.Map("map", {
                    center: [55.76, 37.64],
                    zoom: 5
                });
    """
    
    
    r=requests.post("http://www.otzberg.net/iguserid/index.php", data={"q":str(sys.argv[1]), "mode":"getid"})
    html=r.text
    
    print "======================="
    
    try:
        user_id = int(re.findall('<h4>([^>]+)</h4>', html)[1].split(' ')[2])
    
        r1=requests.get("https://instagram.com/"+sys.argv[1]+"/")
        photos_len = re.findall('"count":([^.]+),"page', r1.text)
    except Exception, e:
        print "Bad username! Exit..."
        print "======================="     
        exit()
    
    
    
    
    
    print "User id: "+str(user_id)
    try:
        print "Count media: "+str(photos_len[0])
    except Exception:
        print "Profile is privat!"
        print "======================="
        exit()
    
    recent_media = api.user_recent_media(user_id=str(user_id))
    count_media=len(recent_media[0])
    
    last_id=0
    map_html1=""
    
    while count_media<int(photos_len[0]):
        for i in recent_media[0]:
            try:
                if i.location:
                    pass
                    print "======================="
                    print i.link
                    print i.location
    
                    map_html1+=u"myPlacemark = new ymaps.Placemark(["+str(i.location.point.latitude)+", "+str(i.location.point.longitude)+"], {\n"
                  
                    if i.location.id=='0':
                        map_html1+=u" hintContent: ' ',\n balloonContent: decodeURIComponent('<a target=\"_blank\" href=\"{}\">{}</a><br><img src=\"{}\">') }}, {{ preset: 'islands#dotIcon' }} );\n myMap.geoObjects.add(myPlacemark);\n\n".format(i.link, i.link, i.images["low_resolution"].url)  
                    else:
                        map_html1+=u" hintContent: ' ',\n balloonContent: decodeURIComponent('<a target=\"_blank\" href=\"{}\">{}</a><br><img src=\"{}\">') }} );\n myMap.geoObjects.add(myPlacemark);\n\n".format(i.link, i.link, i.images["low_resolution"].url)  
    
    
    
            except Exception as error:
                pass
                #print error
    
        if recent_media[0] == []:
            pass
        else:
            last_id=str(recent_media[0][-1]).split(' ')[1]
            recent_media = api.user_recent_media(user_id=str(user_id), max_id=last_id)
            count_media = count_media + len(recent_media[0])
    
    
    map_html+=map_html1
    
    map_html+="""
    
    
    
    
      }
        </script>
    </head>
    
    <body>
        <div id="map" style="width: 600px; height: 400px"></div>
    </body>
    
    </html>
    """
    
    map_file=codecs.open(sys.argv[1]+'_'+str(date.today().year)+'_'+str(date.today().month)+'_'+str(date.today().day)+'.html', 'w', "utf-8")
    map_file.write(map_html)
    map_file.close
    
    print "======================="
    

    Просьба о всех багах и ошибах писать в эту тему.
     
    _________________________
    #1 <Cyber-punk>, 25 Jun 2015
    Last edited: 26 Jun 2015
    YaBtr, M_script and yarbabin like this.
  2. ivanuch90

    ivanuch90 Banned

    Joined:
    29 Nov 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    пошёл тестить.
     
  3. _Spamer_

    _Spamer_ Elder - Старейшина

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    140
    Reputations:
    16
    для работы нужны
    pip install python-instagram
    pip install requests
     
    <Cyber-punk> likes this.
  4. ange007

    ange007 Member

    Joined:
    26 Aug 2009
    Messages:
    28
    Likes Received:
    21
    Reputations:
    0
    Аналог http://www.yomapic.com/ru/ ?
     
  5. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Нет, хотелось бы сделать набор скриптов, которые парсят информацию о человеке из соцсетей и как-то складывают всю информацию воедино. Выявление частых точек, где человек делал фотки/писал твиты, выявление лучших друзей и тд.
     
    _________________________