Апр 052014
 

Одним из первых постов в данном блоге был пост с дампером MessageDump, датированный 4 января 2012. С тех пор в ВК произошло множество изменений, которые затронули как и функциональную, так и техническую часть ВКонтакте, что повлекло за собой полную неработоспособность старой версией. Тем не менее, его актуальность не потерялась, поэтому обновить его было бы логичным ходом.

На этот раз на помощь пришел не я, а мой друг Дима, который, собственно, и почти переписал весь данный скрипт под новые условия.

Работа дампера осталось неизменной, через API, авторизация проводится с помощью access_token. Как его добывать — дело ваше, пост не посвящен этому.

Из скрипта был выпилен весь второстепенный функционал типа зипования результата, вывода диалогов в упрощенном формате, зато были добавлены следующие фичи:

  • Разделение большой истории на мелкие файлы.
  • Поддержка всех видов прикреплений (аудио, видео, подарки, фото).
  • Поддержка пересланных сообщений.
  • Сохранение изображений отдельно от диалога
  • Разделение диалогов по папкам и полу.

В общем работа проведена колоссальная, спасибо Диме за это.

Скачать скрипт можно по ссылке: версия 2.0.1: dumper2_01.zip (208 кб).

P.S. Помните о том, что хранение переписки как минимум аморально, а ее распространение — уголовно наказуемо. Будьте верными тем, кто вам дорог.

Дек 122013
 

Привет.
Недавно для статистики потребовалось определить страны по городу. В результате был собрана БД и написан класс-обертка, который осуществляет поиск по данным.
В базе 243 страны и 54,912 города, в большинстве случаев этого хватает.
Сама БД представляет из себя один JSON файл весом в 4.7 мб, класс-обертка — пару функций для быстрого поиска.
Описание функций:

array GetCountryNames ( [bool $isRussian = true] )
Возвращает массив названий всех стран, содержащихся в БД. 
$isRussian - отдавать названия на русском языке.
 
array GetCountryCodes ( void ) 
Возвращает массив всех кодов стран.
 
string GetCountryCodeByCityName ( string $city )
Возвращает код страны по названию одного из ее городов.
$city - название города (на английском или русском языке). Может быть регулярным выражением.
 
array GetCitiesByCountryCode ( string $code [, bool $isRussian = true] )
Возвращает массив названий всех городов, которые есть в данной стране.
$code - код страны.
$isRussian - отдавать названия на русском языке.
 
string GetCountryNameByCountryCode ( string $code [, bool $isRussian = true] )
Возвращает название страны по ее коду.
$code - код страны.
$isRussian - отдавать название на русском языке.
 
string GetCountryCodeByCountryName ( string $country )
Возвращает код страны по ее названию.
$country - название страны (на английском или русском языке). Может быть регулярным выражением.

Пример использования:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
require('countrydetect.class.php');
$countryDetect = new CountryDetect('db.json');
$countryCode = $countryDetect->GetCountryCodeByCityName('Лаппеэнранта');
if($countryCode !== 'UNKNOWN')
{
	echo sprintf('Страна: %s (%s) (%s)', $countryDetect->GetCountryNameByCountryCode($countryCode), 
					     $countryDetect->GetCountryNameByCountryCode($countryCode, false), 
					     $countryCode);
        // Страна: Финляндия (Finland) (FI)
}
 
var_dump($countryDetect->GetCitiesByCountryCode($countryCode, false));
/*
array(216) {
  [0]=>
  string(8) "Helsinki"
  [1]=>
  string(6) "Vantaa"
  [2]=>
  string(5) "Espoo"
  [3]=>
  string(5) "Lohja"
  [4]=>
  string(6) "Raisio"
  [5]=>
  string(7) "Tampere"
...
*/

Скачать класс + БД: countrydetect.zip (718 кб)

Дек 012012
 

 

Вольный перевод статьи Kohana: Conventions and Coding Style.
С стилем согласен, до чего-то из этого доходил сам, но тут все систематизировано и разложено по полочкам. Примеры кода, написанного в таком стиле можно посмотреть на гитхабе.
Continue reading »

Май 092012
 


Привет всем.
В первую очередь хотелось бы поздравить всех с Днем Победы! К этому празднику я приготовил небольшой скрипт, который клеит ленточки на аватар.
Я не сторонник поздравлений ветеранов ВКонтакте, поэтому сервис писал только для того, чтобы было хоть что-то на тему праздника.

Итак. Скрипт написан на привычной связке Javascript (jQuery + jQuery UI) + PHP.
Сервер скачивает картинку и накладывает на нее watermark, а на клиенте происходит выбор расположения и размеров ленты.
Код получился ужасным, так как я очень спешил. Тем не менее, это позволяет скрипту нормально работать.

Поиграть можно тут: https://blog.bafoed.ru/lenta/
Скачать исходники: http://clck.ru/d/z4HGIIje13esH

Апр 302012
 

После публикации прошлой статьи о генерации поля, несколько человек написали мне в личные сообщения о том, что сгенерировать — не сложно, сложнее отдать это поле пользователю.
Как выяснилось позже — они были правы.

Итак, что получилось в итоге:
Continue reading »

Апр 072012
 

На днях листал Youtube, посмотрел This Is Horosho, потом по «похожим видео» опять пришел к казино схемам.
Опять уверенный голос, опять слова типа: «я полностью финансово независим, делаю по 350$ в день не выходя из дома, это ваш шанс!». Конечно, все люди (особенно финансово независимые) на земле всегда «палят свои темы», ведь конкуренция это хорошо, добавляет азарта.
Для тех, кто не понял — это был сарказм.

Интересно то, что на этот раз мне не стали впаривать Мартингейла, видимо гугл по аналитике понял, что для меня это уже проверенный трюк, и намекнул на проверку другой схемы. Сказано — сделано.

Continue reading »

Апр 062012
 

Всем привет. Вчера было нечем заняться и в голову пришла идея — почему бы не написать генератор поля для игры в сапер? (мысль может показаться ненормальной, просто люблю генерировать что нибудь, будь это поле для игры, или что-нибудь другое).

Также было поставлено четкое условие — I will not use Google. Я уверен что все дописано до меня, но это писалось для саморазвития, а не для продакшена. Спустя 20 минут первый сапер был сгенерирован, еще спустя 20 — был оформлен, с возможностью настройки поля.

Continue reading »

Мар 242012
 

В сети сейчас появилось множество сайтов типа «как обмануть казино» и т.п. Все они рассказывают про одну и ту же схему «обмана» европейской рулетки, про которую я расскажу в общих чертах. Немного погуглив, я нашел, что эта схема называется Мартингейл.
Continue reading »

Фев 212012
 

Часто на странице есть множество input`ов с уже заполненными значениями. Если их 2-3, то парсинг не утомляет, а вот если это например форма изменения информации в какой-нибудь соц. сети — это быстро надоедает.

Сегодня как раз столкнулся с такой ситуацией, моя лень пошла на пользу — спарсил все инпуты одной регэкспой, а затем изменил значения только необходимых инпутов.

Сама регэкспа:

<input.*?name=['|"](?<name>.*?)['|"].*?value=['|"](?<value>.*?)['|"].*?>

Модификаторы: m (multiline), i (case insensitive).

Использование на PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
preg_match_all('/<input.*?name=[\'|"](?<name>.*?)[\'|"].*?value=[\'|"](?<value>.*?)[\'|"].*?>/im', $page, $matches);
$post = array();
foreach ($matches['name'] as $key => $value) {
	$post[$value] = $matches['value'][$key];
}
// Смотрим POST: print_r($post);
// В случае, если форма не одна - удаляем ненужные инпуты с помощью unset
 
// Модифицируем некоторые значения:
$post['Email'] = $username;
$post['Passwd'] = $password;
$post['timeStmp'] = time();
 
// Формируем RAW POST, если используется cURL, то этого можно не делать
$raw = http_build_query($post);