Skip to content

Instantly share code, notes, and snippets.

@lkLeonov
Created November 26, 2016 15:27
Show Gist options
  • Save lkLeonov/99a8a317fc0a7023ed132b2abe291efb to your computer and use it in GitHub Desktop.
Save lkLeonov/99a8a317fc0a7023ed132b2abe291efb to your computer and use it in GitHub Desktop.
var INVITER = {
//chas: '53a8d957e483483cf5', // unique for specific account //lkleonov
chas: 'e796d178a8fd0c3cfb', // unique for specific account //laukye
message: 'Хей, привет! Меня зовут Алексей. В рамках проекта по объединению креативных людей Constellation, мы запустили кампанию по поиску единомышленников. Мы решили, что если ты вдруг тоже заинтересован в поисках оных, то у меня есть для тебя хорошая новость! Попутно мы можем помочь с поисками единомышленников тебе, если ты в них нуждаешься!\n\nРаботает это так: ставишь тег #constellate на стене (или где-нибудь, чтобы тебя можно было найти через поиск) и рядом теги твоих увлечений, в чём ты, может, разбираешься, можешь свободно обсуждать и делиться опытом, творить что-то (ну, например, вот так: "#art #photography #dogbreeding #webdev #handmade #constellate"). И люди смогут потом находить по тегу #constellate тех, кто тоже находится в поисках и видеть, чем они увлекаются, чтобы завязать общение. Или, чтобы дать своим друзьям понять, о чём речь, можешь поставить таких тегов поверх нашей оригинальной записи (https://vk.com/wall-131414654_214), сделав репост.\n\nИ да, если у тебя есть желание быть в команде, считаешь себя готовым перевернуть мир - присоединяйся к нам, вливайся, участвуй. Мы открыты новым людям. Удачи и хорошего дня. (Алексей Леонов, сооснователь Constellation Project)'
}
INVITER.invited = [];
INVITER.failed = [];
var Msg = function() {
var serialize = function(obj) {
var str = [];
for(var p in obj)
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
}
var sendMsg = function(data, callback) {
var xhr = new XMLHttpRequest();
xhr.open("POST", '/al_mail.php', true);
//xhr.setRequestHeader("X-CSRFToken", csrf_token);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (this.readyState != 4) return;
callback(this.responseText);
}
xhr.send(serialize(data));
}
return function(id, message, callback) {
var data = {
//_smt: 'profile:23',
act: 'a_send',
al: 1,
chas: INVITER.chas,
from: 'box',
media: '',
message: message,
title: '',
to_ids: id
}
sendMsg(data, callback)
}
}();
// test
// Msg(50595075, 'Hello', function(d){console.log(d)})
// Rand num between 1 and 6
// Math.floor(Math.random() * 6) + 1
var i = 0;
function inviteLoop () {
if (INVITER.ids.length === 0 ) return;
if (inviteLoop.stop) {
console.log('--------------STOPPED-----------------');
console.log('Processed subscribers: ' + INVITER.invited.length + INVITER.failed.length, 'Invited: ' + INVITER.invited.length, 'Failed: ' + INVITER.failed.length);
return;
}
setTimeout(function () {
Msg(INVITER.ids[i], INVITER.message, function(res) {
var success = /Сообщение отправлено/.test(res);
if (success) {
localStorage.setItem(INVITER.ids[i], 'INVITE: SUCCESS');
INVITER.invited.push(INVITER.ids[i]);
} else {
localStorage.setItem(INVITER.ids[i], 'INVITE: FAIL ' + res);
INVITER.failed.push(INVITER.ids[i]);
}
console.log(INVITER.ids[i], res);
i++;
if (i < INVITER.ids.length) {
inviteLoop();
} else {
console.log('--------------DONE-----------------');
console.log('Processed subscribers: ' + INVITER.ids.length, 'Invited: ' + INVITER.invited.length, 'Failed: ' + INVITER.failed.length);
alert('Processed subscribers: ' + INVITER.ids.length)
}
});
}, (Math.floor(Math.random() * 8) + 1) * 1000 // between 1 and 8 seconds
// }, (Math.floor(Math.random() * 3000) + 1000)
)
}
//INVITER.ids = [0, 50595075, 376951404, 17337286];
//INVITER.ids = [0, 376951404, 17337286, 389931173, 6863583, 51463499, 14212917];
// RUN INVITING
//inviteLoop();
/************************************************/
// Calculating average time for inviting
var minInterv = 1;
var maxInterv = 3
var subsCount = 3000000
var usersInterv = 1000
timeInMin = subsCount / usersInterv * ( (minInterv + maxInterv)/2 ) / 60
// => 100
// Сто минут (час сорок) при среднем интервале запросов 2 сек.
// Т.о. для теста на период времени 15 мин. со средним интервалом 2 сек (1-3), нужно сообщество в ~500 000 чел.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment