Страница 1 из 1
Перепись друзей в приложении.
Добавлено: 25 сен 2012, 19:35
Mihailow_du
Ситуация:
писать приложение я хоть и очень, очень медленно, но учусь и вот недавно сделал запись пользователя запустившего приложение в базу MySql
НО, записать в базу я пока только смог 486 человек, однако приложение уже установлено у 5.480 человек... Помогите решить это:
Задача:
Я запустив приложение попадаю в базу, но при этом знаю, что у 58 моих друзей тоже стоит это приложение и мне нужно их перебрав записать их данные в базу.
Что бы в минимальные сроки все мои 5.480 (ну или как можно больше из них) пользователей приложения попали в базу через их друзей периодически заходящих в приложение...
Я делаю так:
Код: Выделить всё
VK.init(function() { VK.api("friends.get", {}, function(dataAllFriends) { VK.api("friends.getAppUsers", {}, function(dataAppUsers) { var frCount = dataAllFriends.response.length; var appCount = dataAppUsers.response.length; for (i=0;i<appCount;i++) { VK.api("getProfiles", {uids:viewer_id, fields:"sex,city,photo_rec,bdate"}, function(data) { $.post('save_base_man.php', { "viewer_id": viewer_id, "first_name": data.response[0].first_name, "last_name": data.response[0].last_name, "sex": data.response[0].sex, "town": data.response[0].city, "birthdate": data.response[0].bdate, "ava": data.response[0].photo_rec, }, function(data){ $('#result').html(data); }); }); } }); }); });
Но что то все равно не работает... Помогите кто может. Может я просто в корне что то делаю не так??...
Re: Перепись друзей в приложении.
Добавлено: 25 сен 2012, 22:37
Serge
Mihailow_du писал(а):Но что то все равно не работает... Помогите кто может. Может я просто в корне что то делаю не так??...
Ну конкретно в данной ситуации - цикл есть, а перебора нет. [0] ->
Код: Выделить всё
VK.api("getProfiles", {uids:viewer_id, fields:"sex,city,photo_rec,bdate"}, function(data) { $.post('save_base_man.php', { "viewer_id": viewer_id, "first_name": data.response[i].first_name, "last_name": data.response[i].last_name, "sex": data.response[i].sex, "town": data.response[i].city, "birthdate": data.response[i].bdate, "ava": data.response[i].photo_rec,},
Но я бы в таком случае из этих элементов (first_name, last_name и т.д.) составил бы строки (имя_первого,имя_второго) и отправил бы на сервер один раз, а там бы уже разобрал и внес в базу. Правда не знаю, уменьшит ли это нагрузку, но подозреваю, что уменьшит.
P.S. А вообще странно - зачем хранить эти данные у себя? Ведь в любой момент можно взять из ВК.
UPD: Если Вы хотите в базу вносить еще и uid пользователя, которому все это добро принадлежит, то "viewer_id":data.response.uid
А еще надо бы auth_key передавать и сравнивать с real_key, иначе со стороны можно в базу чего угодно напихать.
Re: Перепись друзей в приложении.
Добавлено: 26 сен 2012, 07:37
Mihailow_du
Еще раз спасибо. Чуть позже попробую.
P.S. А вообще странно - зачем хранить эти данные у себя? Ведь в любой момент можно взять из ВК.
Это связано с тем, что проект рассчитан на 12 разных городов и нашим городам нужно видеть именно свою часть аудитории, сколько и каких людей с Красноярска, сколько и каких с Новокузнецка и т.д. Да бесспорно будь это единый проект, например газета или игра, ничего кроме ID и не нужно было, но в нашей специфики эта информация нам пригодиться или даже понадобиться. Тем более в будущем планируется запуск локальной рекламы (для каждого города свою) и нужно опять же знать аудиторию текущего города... Ну тут опять наверное скажете, что это показывает и статистика приложения, но я не знаю... Я запасливый и лучше ничего не делать с имеющейся инфой, чем захотеть что то сделать, а не из чего будет...
Re: Перепись друзей в приложении.
Добавлено: 26 сен 2012, 08:15
Mihailow_du
Что то ничего не сохраняет ни с ключом ни без него...
Код: Выделить всё
<script type="text/javascript" charset="cp1251" >$(document).ready(function(){ VK.init(function(){ VK.api("friends.get", {}, function(dataAllFriends) { VK.api("friends.getAppUsers", {}, function(dataAppUsers) { var frCount = dataAllFriends.response.length; var appCount = dataAppUsers.response.length; for (i=0;i<appCount;i++) { VK.api("getProfiles", {uids:data.response.uid[i], fields:"sex,city,photo_rec,bdate"}, function(data) { $.post('save_base_man.php', { //"auth_key": data.response.auth_key[i], "viewer_id":data.response.uid[i], "first_name": data.response[i].first_name, "last_name": data.response[i].last_name, "sex": data.response[i].sex, "town": data.response[i].city, "birthdate": data.response[i].bdate, "ava": data.response[i].photo_rec, }, } }); }); }); });});</script>
Re: Перепись друзей в приложении.
Добавлено: 26 сен 2012, 19:22
Serge
Mihailow_du писал(а):Что то ничего не сохраняет ни с ключом ни без него...
Код: Выделить всё
<script type="text/javascript" charset="cp1251" > "ava": data.response[i].photo_rec, }, } }); </script>
Тут у Вас скобка } лишняя (дальше не смотрел). Проверки таких ошибок - можно делать запустив консоль в браузере (у меня Хром, открывается через F12).
Если не поможет - надо смотреть, что сервер отвечает. Можно в скрипте добавить "echo $param" (заменив $param на нужную переменную) и через Charles смотреть ответ сервера (тема о нем есть на форуме)
Re: Перепись друзей в приложении.
Добавлено: 27 сен 2012, 09:22
Mihailow_du
Разобрался - у меня действительно большая проблема с синтаксисом команд - я программер *.exe программ, а РНР и Яву только начал потихоньку изучать..
Но у меня проблема теперь в другом...
Определил друзей в приложении (сейчас их у меня 60) и начинаю циклом их перебирать и записывать в базу, но скрипт стопорится записав 5-20 человек - больше не вывозит. Подумал сервер не тянет скорость обращений, поставил задержку в 3сек сразу после очередной записи, а потом и на 10сек исправлял и он вообще перестал работать. Задержку убираю и опять не более 18-20 человек сохраняет и опять СТОП...
Может поймешь в чем "косяк":
Код: Выделить всё
<script type="text/javascript" charset="cp1251" > VK.init(function() { VK.api("friends.get", {}, function(dataAllFriends) { VK.api("friends.getAppUsers", {}, function(dataAppUsers) { var frCount = dataAllFriends.response.length; var appCount = dataAppUsers.response.length; var App = dataAppUsers.response; var AppCount = App.length; document.getElementById('uids_count').innerHTML = 'Количество установивших друзей: ' + AppCount; if (AppCount>0) { var AppUids = App.join(','); VK.api("getProfiles", {uids:AppUids,fields:"sex,city,photo_medium_rec,photo_rec,bdate"}, function(data) { var profilesCount = data.response.length; var profilesStr = ''; for (var i=0; i<profilesCount; i++) { profilesStr += '<img src="' + data.response[i].photo_rec + '" /> '; $.post('save_base_man.php', { "viewer_id": data.response[i].uid, "first_name": data.response[i].first_name, "last_name": data.response[i].last_name, "sex": data.response[i].sex, "town": data.response[i].city.city, "birthdate": data.response[i].bdate, "ava": data.response[i].photo_rec, }, function(data){ $('#result').html(data); }); // sleep(3); document.getElementById('friend_on').innerHTML = profilesStr; } }); } }); }); });</script>
Re: Перепись друзей в приложении.
Добавлено: 27 сен 2012, 09:55
Serge
Не знаю, я задержки в яваскрипте не использую. Рекомендую, опять же, делать в формате
Код: Выделить всё
var viewer_id_s = "";var first_name_s = "";for (var i=0; i<profilesCount; i++) { viewer_id_s += data.response[i].uid; first_name_s += data.response[i].first_name;....
И делать один пост запрос на сервер, передавая пачку строк. На сервере разбивать их в массив и записывать в базу (опять же, можно одним запросом написать). Хотя чисто в теории сервер должен выдерживать такое количество запросов подряд.
Re: Перепись друзей в приложении.
Добавлено: 27 сен 2012, 13:35
Mihailow_du
не понимаю почему это должно облегчить процесс, но даже если и так то как мне быть с прерыванием скрипта?...
А может его контакт блокировать??? мол думает наверное, что я типа хакер и хочу всю базу контакта украсть и перекачать к себе?
Re: Перепись друзей в приложении.
Добавлено: 27 сен 2012, 15:17
Serge
Mihailow_du писал(а):не понимаю почему это должно облегчить процесс, но даже если и так то как мне быть с прерыванием скрипта?...
А может его контакт блокировать??? мол думает наверное, что я типа хакер и хочу всю базу контакта украсть и перекачать к себе?
Вряд ли контакт. Вы обратились к нему, получили информацию и теперь отправка идет от вас к серверу.
Я не знаю, как быть с прерыванием скрипта, яваскрипт вообще не очень дружит с остановкой выполнения кода.