bafoed

Июн 162014
 

Все, что будет описано в данном посте, является опытом, через который я прошел сам, когда решил откатить систему. Из всего опыта работы с Developer Preview могу сказать только одно: никогда не ставьте ее взамен своей основной ОС, используйте дополнительный раздел. Если же вы все-таки сглупили и поставили новую ОСь поверх, то вот моя инструкция по откату. Continue reading »

Апр 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

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