Вы можете на самом деле украсть информацию из общедоступной facebook. Это некрасиво, занимает пару секунд, но работает.
У меня есть JS-код, который запускается с консоли и делает запрос AJAX - те же книги на facebook, когда вы запрашиваете больше друзей в обычном пользовательском интерфейсе facebook при прокрутке вниз (http://www.facebook.com/profile.php? ск = друзья). Затем я проанализирую результат. Пока это работает безупречно. Я просто прошу больше друзей, и когда я не получу матч, я знаю, что у меня есть все.
Я не хочу, чтобы разделить весь код, но это существенная часть:
// Recursively load person friends
function getMoreFriends(job, uid, fb_dtsg, post_form_id, offset, callback, finished){
var url = "http://www.facebook.com/ajax/browser/list/friends/all/?uid="+uid+"&offset="+offset+"&dual=1&__a=1&fb_dtsg="+fb_dtsg+"&lsd=&post_form_id="+post_form_id+"&post_form_id_source=AsyncRequest";
var request = { type: 'POST', url: url, data: { __a: 1, dual: 1, offset: offset, uid: uid }, dataType: "text", complete: function(data){
var response = data.responseText.match(/HTML.*$/)[0];
response = response.replace(/u003c/gi,"<");
response = response.replace(/\\u([a-f0-9]{4})/gm, "&#x$1;").replace(/\\\//g,"/").replace(/\\/g,'');
response = response.match(/^.*<\/div><\/div><\/div>/);
if(response != null){
response = response[0].replace("HTML(","");
var people = [];
$jq(response).find(".UIImageBlock").each(function(){
var newPerson = new Person($jq(this).find('.UIImageBlock_Content a').text(), $jq(this).find('a').first().attr('href'), $jq(this).find('img').attr('src'), jQuery.parseJSON($jq(this).find('a').last().attr('data-gt')).engagement.eng_tid);
people.push(newPerson);
});
callback(people);
getMoreFriends(job, uid, fb_dtsg, post_form_id, offset+60, callback, finished);
}
} };
job.addToQueue(request);
if(job.state != "processing"){
if (typeof finished != "function"){ finished = function(){}; }
job.startProcessing({ finished: function(){ finished(); } });
}
}
Вы можете получить neccesary переменных из текущего пользователя, как это:
function loadFriends(person, onInit, store, callback){
info("loading friends of "+person.name+" initiated");
//addStatus("loading friends of "+person.name+" initiated");
if (typeof onInit == "function"){
onInit();
}
if(person.id == -1){
error("Person "+person.name+" doesn't have an id.!");
addStatus("Person "+person.name+" doesn't have an id.!","error");
return false;
}
else {
// Load friends
var fb_dtsg = $jq('input[name="fb_dtsg"]').eq(0).val();
var post_form_id = $jq('#post_form_id').val();
var loadFriendsJob = ajaxManager.addJob({limit: 1});
getMoreFriends(loadFriendsJob,person.id, fb_dtsg, post_form_id, 0, function(people){ // callback on each iteration
d("Loaded "+people.length+" friends of " + person.name);
store(people);
},function(){ // callback on finish
info("loading friends of "+person.name+" finished");
//addStatus("loading friends of "+person.name+" finished");
if (typeof callback == "function"){ callback(); }
});
}
}
Я понимаю, что это, вероятно, бесполезно для вашего дела, так как это JS. В любом случае, кто-то может найти это полезное.
P.S .: $ jq = jQuery. P.P.S .: эти объекты заданий выполняют последовательные запросы ajax. Я выяснил, что мне они нужны, поскольку мой FF не хотел делать запрос 2000 AJAX одновременно: -D
Какой язык вы используете для разработки своего приложения? Вы пытались поймать исключение? Кроме того, получили ли вы соответствующее разрешение от пользователя? –
Я использую C#. Я выбрал исключение, и его доза не содержит никакой конкретной информации, кроме как из того, что я упомянул. –
@YaronLevi: Мы можем найти друзей друг. Я дал ответ. Пожалуйста, проверьте. Он нуждается в некоторых разрешениях, и эти друзья используют приложение facebook. –