neudor

log

Entries Comments



Month: June, 2009

Всё

21 June, 2009 (08:49) | other | By: neudor

Вот и конец пришёл. Гугл побанил все мои блоги, которые наполнялись перемешиванием снипетов гугловского же поиска по блогам. Очень жаль.

P.S. Скрипты на заказ — обращайтесь. =)

Опять халява

11 June, 2009 (18:00) | other | By: neudor

Разгребая винт, нашёл у себя базы русских имён и фамилий, когда-то спарсенных с контакта. Если интересно — забирайте.

Список спарсен так, что неуникальные имена не отфильтровывались. Ну то есть если уже есть имя “Александр” и пришло ещё одно такое же — он всё равно записывается в результирующий файл. Благодаря этому теперь при выборе рандомного имени чаще будут выбираться распространённые имена, а редкие — реже. Чуть не забыл — все файлы в юникоде.

Напоследок презентую функцию выбора из файла случайной строки. Так как файлы большие, то считывать их целиком чем-то типа file() совсем не комильфо. Поэтому открываем файл, ставим указатель на произвольное место и считываем кусок.

function getRandomLine($file) {
    $max = filesize($file);

    $fp = fopen($file, 'r');
    fseek($fp, rand(0, $max-60));
    $word = stream_get_line($fp, 60);
    fclose($fp);

    $word = explode("\n", $word);
    return trim($word['1']);
}

Манипуляции с json

2 June, 2009 (11:53) | other | By: neudor

Вот предположим вам зачем-то понадобился список чьих-то друзей вконтакте (скриптом, естесственно ;). Предположим, вы нашли человека, список которого открыт для всех. Но вот незадача. Там нет голого хтмл – в странице отдаётся json строка, которая яваскриптом разворачивается в нечто полноценное. Ну, значит будем работать с json строкой. В php есть функция json_decode.

Но тут нас подстерегает вторая засада. Дело в том, что яваскрипт гораздо более лоялен к синтаксису json строки, чем php. В частности, первый допускает
{ foo: "bar" } а второй требует только так
{ "foo": "bar" }

С проблемой определились, будем решать.

$res = file_get_contents('http://vkontakte.ru/friend.php?id=8094439');

$friends = explode("friendsInfo = ", $res, 2);
$friends = explode('</script>', $friends['1'], 2);
$friends = $friends['0'];

//заменяем одинарные кавычки на двойные - тоже требование синтаксиса php
$friends = str_replace("'", '"', $friends);
//регэксп, который оборачивает все ключи в кавычки
$friends = preg_replace('#({|,)\s*([a-z0-9]+):#uis', '$1"$2":', $friends);

//декодируем json, возвращаем массив
$friends = json_decode($friends, true);
debug($friends);

Собственно вот. Только смотрите пишите аккуратные скрипты, чтоб за откровенный спам вам ноги не переломали =).

Ну и вот ещё вдогонку информация, которую можно взять уже отсюда:

array(
    'p' => 'http://cs1431.vkontakte.ru/u84677/b_977e6e9f.jpg', //аватар
    'uy' => '10', //год выпуска
    'uf' => '966', //идентификатор факультета
    'h' => 'f854834e', //фиг знает
    'to' => 'Дмитрия', //имя в родительном падеже, нужно для фразы "друзья Дмитрия"
    'r' => '66', //процент заполненности профиля
    'f' => '0',
    'u' => '240', //идентификатор университета
    'ds' => '0',
    'pr' => '1' //флаг скрытого профиля
);