Апр 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 кб)

Ноя 222013
 

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

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
# blog.bafoed.ru
args=("[email protected]")
table_name=${args[0]}
filename=${args[1]}
if [ -z "${table_name}" ] || [ -z "${filename}" ]
then
	echo "Usage: table_export.sh <table_name_to_export> <sql_dump_filename>"
	exit 0
fi
 
 
readarray tables < <(grep -n "Table structure" $filename)
i=0
start=""
end=""
for line in "${tables[@]}"; 
do
	if [ ! -z "${start}" ];
	then
		[[ "$line" =~ ([0-9]*)\: ]]
		end=${BASH_REMATCH[1]}
		break
	fi
 
	if [[ "$line" == *"\`${table_name}\`"* ]];
	then 
		[[ "$line" =~ ([0-9]*)\: ]]
		start=${BASH_REMATCH[1]}
	fi
	(( i++ ))
done
 
if [ -z "${start}" ];
then
	echo "Can't find table ${table_name} in ${filename}"
	exit 0;
fi
 
if [ -z "${end}" ]; 
then
	end="$(cat $filename | wc -l)"
fi
 
 
`sed -n ${start},${end}p ${filename} > ${table_name}.sql`
echo "See ${table_name}.sql"

Использование: table_export.sh <table_name_to_export> <sql_dump_filename>
Например: ./table_export.sh users pbkp_MySQL_db.sql

Может быть с багами, но с моим дампами сработал нормально.

Май 122013
 

Привет.
Для разработки нового проекта, а также для написания новых статей написал класс генерации строк, с которым хочу поделиться с читателями блога.
Класс позволяет генерировать строку в соответствии с определенным форматом, заданным в стиле регулярных выражений.

Continue reading »

Апр 192013
 

Привет.
Этот пост не несет в себе ничего нового, просто делюсь простым скриптом.
Скрипт предназначен для генерации кода из аргументов в строке запуска cURL. Для чего это нужно? Для ускорения написания некоторых программ, которые активно работают с интернетом.

Continue reading »

Дек 012012
 

 

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

Ноя 132012
 

Содержимое статьи несет в себе исключительно информационный характер и не принуждает вас к нечестной игре.
Слово «Взлом» в названии статьи не совсем соответствует определению, разумеется, что никто не находил SQL-инъекций и не дампал базы данных, все гораздо (чуть больше, чем на 100%) законнее, плюс к этому обвинять вас не в чем, т.к. ничего недоказуемо.

Начать, пожалуй, следует с того, что есть «Клавогонки». Вообщем-то это простая браузерная игрушка, которая позволяет демонстрировать свое превосходство над другими более изощреным методом, чем убиванием боссов, фарма, и крафтинга реликтового оружия, говоря конкретнее, это не ММОРПГ. Суть в следующем: напечатать текст как можно быстрее, быстрее, чем это сделают остальные участники. Из основной идеи вытекают рюшки и плюшки, типа различных режимов, уникальных машин и т.п., но в результате, все равно все сводится к одному — ДАВИ КНОПКИ печатай текст.
Continue reading »

Ноя 012012
 

Добрый день, с вами опять я.
В этой статье я расскажу про способ мошенничества, который, возможно, используется в некоторых лотереях невиданного счастья, для участия в которых необходимо всего лишь поставить лайк/пройти по ссылке/зарегистрироваться/и т.п. . Мне кажется, что человек сразу должен задать вполне адекватный вопрос: «В чем профит раздавать айфоны людям, не получая с них денег за участие? Покупая лотерейный билет, ты тратишь на него деньги, отдавая их в призовой фонд. Где прибыль от моей регистрации на вашем сайте?». Впринципе, после этого вопроса участвовать в подобных сомнительных акциях пропадает.
(Хочу обратить ваше внимание на то, что сейчас я не говорю об акциях известных компаний и магазинов, им нет толку от ваших фоток с собакой, но ваша активность может привлечь лишних покупателей. Тут речь о левых сайтах, которые не продают ничего, а только зазывают народ на новые акции)
Continue reading »