Advertisement
Guest User

RReverser

a guest
Nov 15th, 2010
6,607
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>IGR VkBirthdayExporter</title>
  5.     <style type="text/css">
  6.     #vkLogin{float: left}
  7.     #author{float: right}
  8.     #export{width: 100%}
  9.     </style>
  10.     <script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript"></script>
  11.     <script language="javascript">
  12.     var Base64 = {
  13.         // private property
  14.         _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  15.  
  16.         // public method for encoding
  17.         encode : function (input) {
  18.             var output = "";
  19.             var chr1, chr2, chr2raw, chr3, chr3raw, enc1, enc2, enc3, enc4;
  20.             var i = 0;
  21.  
  22.             //input = Base64._utf8_encode(input);
  23.  
  24.             while (i < input.length) {
  25.  
  26.                    chr1 = input.charCodeAt(i++) & 0xFF;
  27.                    chr2 = isNaN(chr2raw = input.charCodeAt(i++)) ? NaN : (chr2raw & 0xFF);
  28.                    chr3 = isNaN(chr3raw = input.charCodeAt(i++)) ? NaN : (chr3raw & 0xFF);
  29.  
  30.                    enc1 = chr1 >> 2;
  31.                     enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  32.                     enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  33.                     enc4 = chr3 & 63;
  34.  
  35.                     if (isNaN(chr2)) {
  36.                             enc3 = enc4 = 64;
  37.                     } else if (isNaN(chr3)) {
  38.                             enc4 = 64;
  39.                     }
  40.  
  41.                     output = output +
  42.                     this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
  43.                     this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
  44.  
  45.             }
  46.  
  47.             return output;
  48.         }
  49.     }
  50.     function Init()
  51.     {
  52.         VK.init({apiId: APP_ID});
  53.         VK.UI.button("vkLogin");
  54.     }
  55.     function icsEvent(info)
  56.     {
  57.         var s = 'BEGIN:VEVENT\n';
  58.         for(var i in info)
  59.             s += i+':'+info[i]+'\n';
  60.         s += 'END:VEVENT\n';
  61.         return s;
  62.     }
  63.     function zeroPrefix(num)
  64.     {
  65.         return (num < 10) ? '0' + num : num;
  66.    }
  67.    function authInfo(response)
  68.    {
  69.        if(!response.session) return;
  70.        
  71.        VK.api('friends.get', {fields: 'first_name,last_name,bdate'}, function(data){
  72.            var exportData = 'BEGIN:VCALENDAR\nPRODID:IGR VkFriendExporter\nVERSION:2.0\n';
  73.            
  74.            data = data.response;
  75.            for(var i in data)
  76.            if(data[i].bdate)
  77.            {
  78.                var info = data[i];
  79.                
  80.                var bdparts = info.bdate.split('.');
  81.                bdparts[0] = zeroPrefix(bdparts[0]);
  82.                bdparts[1] = zeroPrefix(bdparts[1]);
  83.                if(!bdparts[2]) bdparts[2] = 2000;
  84.                
  85.                var now = new Date();
  86.                exportData += icsEvent({
  87.                    DTSTART    : bdparts.reverse().join(''),
  88.                    RRULE      : 'FREQ=YEARLY',
  89.                    LOCATION   : 'VKontakte',
  90.                    UID        : 'vk'+info.uid,
  91.                    DTSTAMP    : ''
  92.                                 +now.getUTCFullYear()
  93.                                 +zeroPrefix(now.getUTCMonth()+1)
  94.                                 +zeroPrefix(now.getUTCDate())
  95.                                 +'T'
  96.                                 +zeroPrefix(now.getUTCHours())
  97.                                 +zeroPrefix(now.getUTCMinutes())
  98.                                 +zeroPrefix(now.getUTCSeconds())
  99.                                 +'Z',
  100.                    SUMMARY    : info.first_name+' '+info.last_name,
  101.                    CLASS      : 'PRIVATE',
  102.                    URL        : 'http://vkontakte.ru/id'+info.uid,
  103.                    CATEGORIES : 'Friends,Birthdays',
  104.                    TRANSP     : 'TRANSPARENT'
  105.                });
  106.            }
  107.        
  108.            exportData += 'END:VCALENDAR\n';
  109.        
  110.            document.getElementById('export').value = exportData;
  111.        });
  112.    }
  113.    </script>
  114. </head>
  115. <body onload="Init()">
  116.     <div id="vkLogin" onclick="VK.Auth.login(authInfo, 2)">Fetch</div><div id="author">Author: <a href="mailto:RReverser@gmail.com">RReverser</a></div>
  117. <textarea id="export" name="export" rows="30"></textarea><br />
  118. <input type="button" onclick="location.href='data:application/force-download;base64,'+Base64.encode(document.getElementById('export').value)" value="Save (experimental)" />
  119. </body>
  120. </html>
Advertisement
RAW Paste Data Copied
Advertisement