0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

au のガラホ(KYF36)がほぼ壊れてiPhoneに機種変更したが、電話帳のインポートはそのままでは無理だった

Last updated at Posted at 2023-01-29

機種変更した経緯

ガラホ(au KYF36)の充電が出来なくなり、ヤバイと思い急遽 au Shop でのプラン変更で ESIM して iPhone SE2 に機種変更した。

機種変更前にやっとくべきだった。。

ガラホの電話帳を移行する前に切り替えてしまったので au お預かりサービス等使用できずにスムーズに出来なかった。

元端末の電話帳エクスポート

色々な充電ケーブル挿したがすべて反応せずでしたが、ケーブル挿す場所に「フッ!!」って息を吹いたら充電できるようになった。
(ってかこれで充電できなかったら電池足りなくて終わってました。。。。。。

サポートツール(安心安全なんちゃら)を使用して電話帳データをSDカードにエクスポートしました。

データフォーマット

vCard を想定していたのですが、 json でした。。。。
部分抜粋です。
(グループは無視してます)

sample.json
[
  {
    "accountName": "Contacts",
    "accountType": "jp.kyocera.localcontacts",
    "customRington": null,
    "email": [
      {
        "data1": "xxxx@example.com",
        "data2": "4",
        "data3": null,
        "data4": null
      },
      {
        "data1": "xxxx@example.com",
        "data2": "4",
        "data3": null,
        "data4": null
      },
      {
        "data1": "xxxx@example.com",
        "data2": "3",
        "data3": null,
        "data4": null
      }
    ],
    "errorDisplayName": "田中 太郎",
    "event": [],
    "groupMembership": [
      4
    ],
    "im": [],
    "nickname": {
      "data1": "",
      "data2": "",
      "data3": ""
    },
    "note": [],
    "organization": [],
    "phone": [
      {
        "data1": "090-1234-1111",
        "data2": "2",
        "data3": null
      }
    ],
    "photo": {
      "data15": null,
      "dislayPhotoName": null
    },
    "relation": [],
    "sendToVoicemail": 0,
    "sipAddress": [],
    "starred": 0,
    "structuredName": {
      "data1": "田中 太郎",
      "data2": "",
      "data3": "田中 太郎",
      "data4": "",
      "data5": "",
      "data6": "",
      "data7": null,
      "data8": null,
      "data9": "タナカ タロウ"
    },
    "structuredPostal": [],
    "website": []
  }
]

同じ状況になっている先人がいるのでは・・・

はい、いらっしゃいました。
参考にさせていただきました。

そのままだと動かなかったのでちょっと加工・修正してみました。

まずは jq を使用して Contacts[N].json を一つのファイルにマージ

jq -s add Contacts*.json > all.json

マージした json の下部に下記の様な不要なデータがあるので vi で手動で削除

  },
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null,
  null
]
null,

削除に合わせて「null」を viで置換
( null は NameErrorになってしまうので。。)

:$s/null/""/g

手動で修正した json データを python で vCard 形式に変更

json_to_vcard_convert.py
import json
output_contacts = open('./output.vcf', 'w', encoding='utf-8')

json_file = open('./all.json', 'r')
json_load = json.load(json_file)
objects_length = len(json_load)
for i in range(0, objects_length -1):
    # objects_length -1 あってるかな。。。
  output_contacts.write('BEGIN:VCARD\n')
  output_contacts.write('VERSION:3.0\n')
  print(i)
  firstname = json_load[i]['structuredName']['data1']
  lastname = json_load[i]['structuredName']['data3']
  output_contacts.write('N:' + lastname + ';' + firstname + '\n')
  output_contacts.write('FN:' + firstname + ' ' + lastname + '\n')
  output_contacts.write('X-PHONETIC-LAST-NAME:' +
                       json_load[i]['structuredName']['data9'] + '\n')
  if len(json_load[i]['phone']) > 0:
    #電話番号設定が無いと json_load[i]['phone'][0] で落ちてしまう。。。
    output_contacts.write('TEL;type=CELL;type=VOICE;type=pref:' +
                       json_load[i]['phone'][0]['data1'] + '\n')
  output_contacts.write('END:VCARD' + '\n')
json_file.close()
output_contacts.close()

出来上がった vcf ファイルを airdrop 経由で iPhone に転送すれば一括登録出来ます

性・名とニックネームが両方表示されてしまいますが数百件単位で入れること考えたらまぁいいかと。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?