Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

Скрипт импорта контактов для телефонов Nokia 108, 220, 225

Neo using phone to call

Простой и универсальный способ импорта списка контактов в телефоны Nokia на платформе S30+ используя MS Excel (OpenOffice Spreadsheet) ипростой  скрипт на PHP.

Случилось так что телефоны на базе платформы S30+ не поддерживают Nokia PC Suite и другие менеджеры, благодаря которым можно полностью управлять содержимым своего телефона от Nokia.

Включаем смекалку, исследуем и добиваемся поставленной задачи!

Содержание:

  1. Предисловие
  2. Принцип импорта контактов
  3. Формат vCard
  4. Подготовка списка контактов
  5. PHP скрипт генерации файла vCard
  6. Заключение

Предисловие

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

Но в то же время не всем нужен мощный смартфон, особенно если предполагается использовать устройство преимущественно для звонков. В сегменте простых телефонов-звонилок бренд Nokia уже давно зарекомендовал себя как один из лидеров. Данные телефоны  просты в использовании, надежно собраны и имеют некоторые простые но приятные плюшки типа: фонарик, FM-радио и другие.

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

Данная статья поможет вам импортировать ваш список контактов из таблички MS Excel или OpenOffice Spreadsheet в ваш телефон буквально в несколько шагов. О том как перевести ваши контакты из Outlook Express, Gmail и других программ и сервисов в таблицу MS Excel я рассказывать не буду, думаю сами разберетесь.

Метод подходит для импорта контактов в телефоны Nokia 108, 220, 225. Также подобный подход можно применить и для других моделей телефонов.

Принцип импорта контактов

В телефонах Nokia на платформе S30+ можно сделать резервную копию контактов и настроек.  Для этого есть отдельный пункт в меню Настройки(Settings), который зовется "Резервное копирование"(Backup) или же как-то по другому в зависимости от марки телефона и используемого языка меню. Если такого пункта нет то скорее всего похожая опция присутствует в списке ваших контактов, в настройках или опциях(Settings) для списка контактов.

Чтобы иметь возможность делать резервную копию в телефон нужно установить карту памяти MicroSD, на ней будет создана папка Backup, а в ней после резервного копирования появится файлик под именем: backup.dat .

Если открыть данный файл то в нем обнаружим записи наподобие тех что отображены ниже:

BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;Morpheus;;;
TEL;VOICE;CELL:+998777711110
END:VCARD

BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;Trinity;;;
TEL;VOICE;CELL:+998777711100
END:VCARD

BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;Mr. Smith;;;
TEL;VOICE;CELL:+991000010000
END:VCARD

BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;=D0=9C=D0=BE=D0=B4=D0=B5=D0=BC DSM2K;;;
TEL;VOICE;CELL:+991010101010
END:VCARD

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

Подобный файл можно составить самому, загрузить его на место файла backup.dat , что на карточке MicroSD, и потом в телефоне сделать восстановление контактов из резервной копии.

Остается разобраться что это за формат и как нам сделать генерацию файла со всеми контактами в таком формате.

Формат vCard

VCard - это формат разработанный для обмена электронными визитными карточками в текстовом формате. Данный формат подробно описан в Википедии, нам же нужно знать всего малость из его структуры.

Рассмотрим то что нагенерировал нам телефон, построчно:

BEGIN:VCARD - начало карточки
VERSION:2.1 - указывается используемая версия спецификации vCard.

N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;Trinity;;; - содержит Имя, N(Name). Сначала указаны особенности использования кодировки (метод quoted-printable), кодировку символов(UTF-8, юникод) и в конце само имя - Trinity. Обратите внимание на разделители ";", каждое поле ключ-значение использует разделитель, в конце должно присутствовать такое же количество закрывающих разделителей.
TEL;VOICE;CELL:+998777711100 - указан телефонный номер для всех типов дозвона.
END:VCARD - конец карточки.

Для составления файла с контактами нужно генерировать для каждого контакта вот такую запись(карточку), изменив имя и телефон (Trinity, +998777711100).

Но есть особенность для использования кириллических символов. Как вы заметили в примере выше присутствует строка:

N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;=D0=9C=D0=BE=D0=B4=D0=B5=D0=BC DSM2K;;;

Здесь вместо имени набор символов: =D0=9C=D0=BE=D0=B4=D0=B5=D0=BC DSM2K .

Это закодированная запись "Модем DSM2K" с использованием метода quoted-printable в кодировке UTF-8. Кириллические символы были закодированы, а символы латиници остались как есть.

Подготовка списка контактов

Первым делом нужно собрать все контакты и сохранить их в удобном формате. Для работы будем использовать OpenOffice Spreadsheet (аналог MS Excel для работы с таблицами). Расскажу подробно и с рисунками, как для новичков.

Скачать пакет OpenOffice можно на официальном сайте, а также можно использовать портабельную версию без установки - качаем с сайта PortableApps OpenOffice Portable (~100Mb). Также можно использовать свободный пакет LibreOffice.

Запускаем OpenOffice, из меню приложений выбираем Spreadsheet (Таблица).

OpenOffice Spreadsheet

В первой колонке будем писать имя контакта, а во второй полный номер телефона, вот пример заполнения:

Формируем список контактов

Готово? - Отлично! Сохраняем себе этот список в надежное место на компьютере, возможно еще когда-то пригодится, лишняя резервная копия не помешает.

Для удобства работы с данными нужно переконвертировать список в текстовый формат с разделителями - CSV(COmma Separated Values). Для этого идем в Файл(File) - Сохранить как(Save As). В списке где Тип файла(File type) выбираем Text CSV(.csv) и сохраняем.

ОпенОффис выдаст запрос о текущем формате документа - жмем Использовать текущий формат(Keep Current Format).

В диалоговом меню Экспорт текстовых файлов (Export of text files), которое появится, выбираем:

  • кодировку (Character set) -  Cyrillic (Windows-1251);
  • разделитель полей (Field delimiter) - символ ";" (точка с запятой);
  • Разделитель текста (Text delimiter) - оставляем пустым.

Опции сохранения таблици в формате CSV

Сохраняем файл под именем phones.csv, вот в каком формате он получится:

Name;Phone
Morpheus;+998777711110
Trinity ;+998777711100
Mr. Smith ;+991000010000
Модем DSM2K;+991010101010

Теперь осталось написать скрипт,  который из подобного формата будет генерировать файл резервной копии с записями в формате vCard.

PHP скрипт генерации файла vCard

Для запуска скрипта на языке PHP можно использовать локальный веб-сервер (Denwer, OpenServer) или же сервер на любом хостинге где установлен интерпретатор PHP. А можно скачать только сам PHP под Windows вот тут.

Вот исходный код скрипта:

/*------------------------------------
    CSV to vCard Contacts Converter
    for Nokia 108, 220, 225
    https://ph0en1x.net
--------------------------------------*/

// specify path to CSV phones book,
// in CP1251 encoding, splitter - ";"
$file = 'phones.csv';

// Generating simple vCard record for 
// Nokia 108, 220, 225 phones based on S30+ platform
function Nokia_vCard_Gen($name = '', $phone = '') {
	if(strlen($name)>16) {
		echo "WARNING: [".$name."] (".strlen($name).")".
			 " will be truncated to 16 symbols.\r\n";
		$name = substr($name, 0, 16);
	}
	$name = iconv("windows-1251", "utf-8", $name);
	$vCard = "BEGIN:VCARD\r\nVERSION:2.1\r\n";
	$vCard .= "N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;".
			 quoted_printable_encode($name).";;;\r\n";
	$vCard .= "TEL;VOICE;CELL:".$phone."\r\n";
	$vCard .= "END:VCARD\r\n";
	return $vCard;
}

$csv_file = file_get_contents($file);
$vCard = '';
$contacts_count = 0;
$csv_ex = explode("\r\n", $csv_file);
foreach($csv_ex as $line) {
	$line_ex = explode(";", $line);
	if(isset($line_ex[0]) && $line_ex[0]=='Phone') // Skip CSV header
		continue;
	if(isset($line_ex[0]) && $line_ex[0]!='' && isset($line_ex[1]) && $line_ex[1]!='') { 
		$vCard . = Nokia_vCard_Gen( trim($line_ex[0]), trim($line_ex[1]) );
		$contacts_count++;
	}
}

file_put_contents('backup.dat', $vCard);
echo 'Done. Contacts in backup: ' . $contacts_count . "
";
echo '<a' . ' href="backup.dat" download>Download backup.dat</' . 'a>';

Вот что делает скрипт. Считываем файл CSV и разбиваем его содержимое на строчки. Каждая строчка - это уже готовые данные для карточки, нужно только разбить ее используя разделитель ";". На основе полученных имени и номера телефона, для каждой строки в файле CSV генерируем карточку, используя функцию Nokia_vCard_Gen. Функция Nokia_vCard_Gen генерирует карточку на основе указанного имени и номера телефона, корректно кодирует кириллические символы. Все сгенерированные функцией карточки сохраняем в один файл.

Как использовать скрипт:

  1. В папку со скриптом ложим наш файл phones.csv со списком контактов;
  2. Запускаем скрипт на выполнение;
  3. Скачиваем сгенерированный скриптом файл backup.dat (появится в папке со скриптом);
  4. Загружаем backup.dat на MicroSD карточку в телефоне, в папку Backup;
  5. Запускаем импорт контактов в телефоне.

Заключение

Весь комплект файлов с примерами всех документов можно скачать здесь: nokia-contacts-vcard-gen-php.zip (10Кб).

Используя знания из данной статьи можно написать похожие скрипты для импорта контактов в другие модели телефонов, которые используют для резервного копирования-восстановления формат vCard.

Если статья оказалась полезной - помочь проекту можно тут: 👍 ПОМОЩЬ, 🎁 DONATE
4 8989 PHP
Комментарии к публикации (6):
Andrey #1Andrey
27 Июнь 2015 11:12

Есть способ проще, по крайней мере для Nokia 220

1. Синхронизовать контакты старого телефона с Nokia PC Suite
2. Экспортировать контакты из Nokia PC Suite в локальную папку. Для каждого выбранного контакта будет создан файл *.vcf
3. Подлючить Nokia 220 через USB в режиме накопителя
4. Скопировать созданную папку с контактами на карту памяти
5. В меню телефона перейти на карту памяти и для каждого файла из списка сделать Открыть -> Сохранить

0
ph0en1x #2ph0en1x
27 Июнь 2015 16:22

Знаю о таком способе, хотя не всегда переливается корректно.
Суть же моей задачи была немного иная: возможность хранить список контактов на компьютере в формате таблички, там же можно быстро добавить/удалить/поправить контакты, а с помощью скрипта быстро импортировать эту таблицу в телефон. Править данные контактов в телефоне достаточно неудобно, к тому же телефон можно потерять, а резервный список контактов на компьютере останется wink.

+2
Chipo #3Chipo
09 Ноябрь 2015 16:27

Полезная инфа. Жаль попалась после того как вопрос уже удалось решить.
Не проблема если контактов несколько... а вот если например их 800 было в старом и теперь их надо перенести в новый нок 220, по одному это становится невероятной проблемой.
Как решил:
слил со старого контакты, перенес на флешку, в андроид телефоне сделал импорт, синхронизировал телефоны по синему зубу. И самое интересное. На нок 220 заходим в контакты, нажимаем функции, скопир. конт., в самом низу - другое устройство, телефон... и контакты копируются из андроид устройства полностью списком. wink
п.с. полноценно скопировать список удалось только с самсунга на андроиде. Другие нокии, самсунги, на разных платформах либо копировали частично, либо не корректно.

+3
Микас #4Микас
19 Декабрь 2015 23:13

Может кому пригодится. Nokia 130 и другие бюджетные телефоны на ОС s30+. Загрузка данных из гугл акка:

1. Экспортируем свою адресную книгу из гугл аккаунта в формате vdata (для iOS и пр.);
2. Переименовываем полученный файл в backup.dat;
3. Заливаем файл backup.dat в корень SD карты;
4. Заходим в Контакты - Настройки -Восстановить контакты.

И вуаля... Happy Все контакты восстановлены.

+3
Andreika #5Andreika
05 Декабрь 2016 18:37

Хорошая статья.
Обновлю этот способ!
Вопрос стоял в том, чтоб занести в званилку Nokia 108 все мои контакты с Google. По причине того, что мой айфон ушёл в сервис по гарантии. Все свои контакты я уже много лет храню в гугле. Там естественно, возможности контакта большие (несколько номеров, разные типы, фотки и так далее). В нокии используется самый простой формат, тобиж, один номер одного типа, и к тому же с кириллицей проблема(как описано в этой статье - нужно перекодировать). Так как, звонилка у меня на время, контакты нужны на короткий срок. Решено было, не заморачиваться, а максимально быстро всё оформит.
Вот самый просто и быстрый способ получить почти все контакты в телефне.
1. Экспортируем с google все контакты в vcard.
2. Открываем файл в редакторе типа Notepad++
3. Копируем весь код в буфер и переносим в сервис транслита, типа www.translit.ru. Конвертируем. В итоге мы имеем все русские контакты на транслите. Этим мы упрощаем нам работу.
4. Заменяем оригинальный код на транслит в NotePad++
5. Телефон не понимает разные типы номеров(типа Домашний, Рабочий и так далее). Для него есть только один тип "CELL". Все контакты которые имеют другой тип, в телефоне не будут отображаться. Сам контакт будет, но номера в нем не будет. Поэтому, нужно заменить все типы на CELL. Пользуемся встроенным инструментом замены в Notepad++. Заменяем все типы на CELL. Можно быстренько пробежаться по коду и прикинуть, какие там у вас типы используются. И заменить их. У меня были в основном HOME и WORK.
6. Сохраняем на флушку в файл backup.dat
7. Востанавливем контакты с флешки в телефоне

Единственный минус этого метода - если в контакте более одного номера, после всех манипуляций, в телефоне будет отображаться только один номер, который шёл первым в коде контакта.
Так как мне контакты нужны были на короткий срок - этот недостаток смог пережить.

+1
Ostap #6Ostap
29 Август 2018 12:36

Есть вариант намного проще, испробован на Nokia 230 для того что б на нее скопировать контакты заходим параметры/контакты/перенести контакты, делаем сопряжение с телефоном с которого вытягиваем контакты, готово!

0