Есть ли жизнь на Марсе? Этот вопрос чисто академический. Все ли купленные мной программы есть в открывшемся сегодня iTunes Store Ukraine и стоит ли на него переходить? А это уже практический и волнующий владельцев iPhone и iPad из Украины вопрос.

Я уже сталкивался с тем, что в iTunes Russia не было некоторых программ, прекрасно себя чувствовавших в iTunes USA. Поэтому я преодолел первый порыв переключиться на iTunes Store Ukraine.

Перебирать программы вручную было лень, потому как пришлось бы вручную вбить 92 программы в iTunes Store:

Писать полноценную программу тоже не хотелось, ведь это получение ответа на единственный вопрос. Поэтому написал одну строку в shell. Без проверки ошибков и красивых обёрток. Воспользовавшись отработанным ранее приёмом “Получение информации по приложениям iPhone в iTunes из shell” и интерфейсом к Search API iTunes.

Команда (вам нужно поменять в начале строки /Volumes/Data/Music/iTunes Music/Mobile Applications на путь к вашему каталогу “Mobile Applications”). Также можно заменить страну в переменной itsCountry, взяв её из списка ISO-кодов.

itsDir="/Volumes/Data/Music/iTunes Music/Mobile Applications"; itsCountry="UA"; if [ ! -d "$itsDir" ]; then echo "Directory for Mobile Applications does not exist"; else find "$itsDir" -type f -name \*ipa -print0 | while IFS="" read -r -d "" file ; do res=$(unzip -p "$file" iTunesMetadata.plist | plutil -convert xml1 - -o - | grep -A1 -e itemName -e itemId | grep -e 'integer' -e 'string' | sed -e 's/^.*<integer>//' -e 's/^.*<string>//' -e 's/<.*$//' | tr '\n' ';'); id=$(echo "$res" | cut -d ';' -f 1); name=$(echo "$res" | cut -d ';' -f 2); result=$(curl "http://itunes.apple.com/lookup?country=$itsCountry&id=$id" 2> /dev/null | grep resultCount | cut -d : -f 2 | sed 's/,//');  printf "%s\t%s\t%s\n" "$id" "$result" "$name"; done; fi;

Формат вывода: первая колонка – itemId, вторая – есть ли программа в UA iTunes Store, третья – её название.

Развёрнутый вариант:

#!/bin/bashitsDir="/Volumes/Data/Music/iTunes Music/Mobile Applications"itsCountry="UA"if [ ! -d "$itsDir" ]; then 	echo "Directory for Mobile Applications does not exist"else	find "$itsDir" -type f -name \*ipa -print0 | \	while IFS="" read -r -d "" file ;	do		res=$(unzip -p "$file" iTunesMetadata.plist | plutil -convert xml1 - -o - | \			grep -A1 -e itemName -e itemId | grep -e 'integer' -e 'string' | \			sed -e 's/^.*<integer>//' -e 's/^.*<string>//' -e 's/<.*$//' | \			tr '\n' ';');		id=$(echo "$res" | cut -d ';' -f 1);		name=$(echo "$res" | cut -d ';' -f 2);		result=$(curl "http://itunes.apple.com/lookup?country=$itsCountry&id=$id" 2> /dev/null | \			grep resultCount | cut -d : -f 2 | sed 's/,//');		printf "%s\t%s\t%s\n" "$id" "$result" "$name"	done fi

Результат неутешительный. Нет многих программ, которые я использую ежедневно. Вывод – пока переключаться нельзя, стоит подождать.

319898689	1	1Password Pro427276530	1	AirPort Utility410592976	1	Wolfram Algebra Course Assistant388497605	0	Google Authenticator343938310	1	Billings Touch367003839	1	Booking.com Hotel reservations for 215,000+ hotels482063361	1	Byword376694347	1	Calcbot — The Intelligent Calculator329670577	0	Camera+375295479	1	Carcassonne415408192	1	CarTunes Music Player304603074	1	CashTrails - Income and Expense Tracker303491945	1	Comics290527470	1	Currency Converter HD - Money Exchange Rates421706526	1	Day One (Journal/Diary)312088272	0	Dictionary Universal327630330	1	Dropbox364203371	1	eBay for iPad510430668	1	Official UEFA EURO 2012 app281796108	1	Evernote398081659	0	Everyday466122094	1	Find My Friends376101648	1	Find My iPhone306934924	1	foursquare339003573	1	Gloss.ua448618544	1	GPSies+376302649	0	Animated Knots by Grog342115564	1	Hipstamatic410370669	1	Honk - Find Car, Parking Meter Alarm and Nearby Places364709193	1	iBooks348529501	1	iCacti - Server Monitor407417097	1	iFixit: Repair Manual492589053	1	Планета Кино IMAX342792525	1	IMDb Movies &amp420368235	1	Instacast288545208	1	Instapaper287765826	1	iSSH - SSH / VNC Console490217893	1	iTunes U302584613	0	Kindle – Read Books, Magazines &amp288429040	1	LinkedIn352861751	1	Linode Manager438441429	1	ЛитРес:347019672	0	Momento (Diary/Journal)340173808	0	Eastern Europe - iGO primo app318103548	1	Occasions: Birthdays &amp284885288	1	OmniFocus for iPhone383804552	1	OmniFocus for iPad375589283	1	Parcel300311831	1	PCalc Lite Calculator298055896	1	Pingdom379873499	0	Pixelogic for iPad - Picross Enhanced406513617	0	Google Places409793190	0	Powderful326277589	1	Privat24421507115	1	Prompt368494609	1	QR Reader for iPhone327870903	1	Rackspace Cloud398011800	1	Jamie's Recipes429590524	1	Reddit Pics HD375661689	1	Reeder for iPad325502379	1	Reeder284417350	1	Remote298398207	1	Road Trip • MPG, Mileage and Fuel Economy385824712	1	Safari To Go411206394	1	Scan400012962	1	Screens VNC289429962	1	Simplenote304878510	1	Skype337013987	1	Urban Dictionary by Slango320606217	1	Sleep Cycle alarm clock348142037	1	Soulver - the notepad calculator355554941	1	SoundHound300704847	1	Speedtest.net Mobile Speed Test476500832	0	SpellTower447067819	1	Sygic Україна: GPS навігація345571518	0	English Grammar in Use Tests417817520	0	Tiny Wings471857988	0	Ticket to Ride Pocket428851691	1	Tweetbot — A Twitter Client with Personality for iPhone392501688	1	Verbs IM364824944	1	Web Albums HD for Picasa293642937	1	Weightbot — Track your Weight in Style310633997	1	WhatsApp Messenger313877526	1	Yandex.Maps286419912	0	You're #1 — Speed Dial364297166	1	Zinio - Your Magazine Newsstand. Explore, Read, Shop from thousands of magazines worldwide.454781476	0	Zombieville USA 2318556039	1	Авто-Помощник Лайт477098256	1	Антиштраф477718890	1	КиноПоиск520797969	0	Яндекс.Музыка397682052	1	Правила дорожнього руху України

Вариант команды с выводом цены (NaN = нет информации, нужно поменять страну в начале строки в переменной itsCountry на “RU” или “US”):

itsDir="/Volumes/Data/Music/iTunes Music/Mobile Applications"; itsCountry="UA"; if [ ! -d "$itsDir" ]; then echo "Directory for Mobile Applications does not exist"; else find "$itsDir" -type f -name \*ipa -print0 | while IFS="" read -r -d "" file ; do res=$(unzip -p "$file" iTunesMetadata.plist | plutil -convert xml1 - -o - | grep -A1 -e itemName -e itemId | grep -e 'integer' -e 'string' | sed -e 's/^.*<integer>//' -e 's/^.*<string>//' -e 's/<.*$//' | tr '\n' ';'); id=$(echo "$res" | cut -d ';' -f 1); name=$(echo "$res" | cut -d ';' -f 2); curlOut=$(curl "http://itunes.apple.com/lookup?country=$itsCountry&id=$id" 2> /dev/null); result=$(echo "$curlOut" | grep resultCount | cut -d : -f 2 | sed 's/,//'); price=$(echo "$curlOut" | grep -i price | head -1 | sed 's/^.*"price"://' | sed 's/,.*$//'); if [ "$price" = "" ]; then price="NaN"; fi; printf "%s\t%s\t%5s\t%s\n" "$id" "$result" "$price" "$name"; done; fi

И развёрнутый вариант:

#!/bin/bashitsDir="/Volumes/Data/Music/iTunes Music/Mobile Applications"itsCountry="UA"if [ ! -d "$itsDir" ]; then 	echo "Directory for Mobile Applications does not exist"else	find "$itsDir" -type f -name \*ipa -print0 | \	while IFS="" read -r -d "" file ;	do		res=$(unzip -p "$file" iTunesMetadata.plist | plutil -convert xml1 - -o - | \			grep -A1 -e itemName -e itemId | grep -e 'integer' -e 'string' | \			sed -e 's/^.*<integer>//' -e 's/^.*<string>//' -e 's/<.*$//' | \			tr '\n' ';');		id=$(echo "$res" | cut -d ';' -f 1);		name=$(echo "$res" | cut -d ';' -f 2);		curlOut=$(curl "http://itunes.apple.com/lookup?country=$itsCountry&id=$id" 2> /dev/null);		result=$(echo "$curlOut" | grep resultCount | cut -d : -f 2 | sed 's/,//');		price=$(echo "$curlOut" | grep -i price | head -1 | sed 's/^.*"price"://' | sed 's/,.*$//');		if [ "$price" = "" ];		then			price="NaN"		fi;		printf "%s\t%s\t%5s\t%s\n" "$id" "$result" "$price" "$name"	done fi