Подтвердить что ты не робот

Как получить 400 списков из iTunes

Как получить список из 400 лучших (или более) приложений для iTunes? Мне нужны лучшие платные, бесплатные и кассовые списки для каждой категории и в целом.

Я знаю, что rss-канал существует, https://rss.itunes.apple.com/, но это дает вам только 200 лучших. Однако такие сайты, как AppFigures и AppAnnie, имеют списки из 400 или более 500, а приложения в магазине приложений отображают максимальную 400.

Я попробовал фид EPF, в таблице популярности всего двадцать строк, а с других форумов похоже, что этот фид был недоступен в течение нескольких месяцев, и он не обновляется так часто, как эти другие сайты, похоже, в любом случае.

Я ищу решение прямо от Apple, а не через стороннюю компанию. Я на 99% уверен, что Apple предоставляет эти данные ежечасно, но я не знаю конечной точки.

4b9b3361

Ответ 1

Здесь, как вы это делаете... вы можете нажать URL следующим образом и предоставить пользовательский агент iOS5.

_IOS_DEEP_RANK_URL_BASE = 'https://itunes.apple.com/WebObjects/MZStore.woa/wa/topChartFragmentData?genreId=%s&popId=%s&pageNumbers=%d&pageSize=%d'

_IOS_DEEP_RANK_USERAGENT =  'iTunes-iPad/5.1.1 (64GB; dt:28)'

Вам также нужно установить фронт магазина, основываясь на какой стране вы хотите.

"X-Apple-Store-Front: 143441-1,9"

Ответ 2

Обновление 12 октября 2015 г.. Согласно заявлению Apple Developer Support от 9 октября 2015 г. проблема была решена.


RSS-каналы действительно в настоящее время ограничены 200 результатами (хотя в прошлом они были установлены на максимальную 400),

Что касается отношения EPF - некоторые сервисы (например, Chomp) опирались на него в прошлом. Я не уверен в его текущем статусе, но если вы попытались использовать его, убедитесь, что вы получаете полный еженедельный выпуск (размер которого должен быть в диапазоне более 5 ГБ), а не только инкрементный выпуск. Может быть, это причина, по которой вы получаете всего несколько строк?

В настоящее время я не знаю других способов получить эту информацию от Apple напрямую. Вы можете попробовать бесплатный сервис f6s или использовать API, предоставляемый другой платной услугой.

Обновление - полученная обратная связь Apple:

Это интересная тема для меня, поэтому я связался с Apple вчера и спросил, есть ли способ получить эти данные непосредственно от них. Сегодня утром я получил обратную связь о доступности данных диаграммы из команды iTunes Affiliate в Apple. Они подтвердили ограничения RSS-канала, а также ответили на вопрос EPF:

Если вы являетесь аффилированным лицом, вы можете посмотреть в EPF Relational, чтобы разработать собственные результаты поиска.

EPF - это многогигабайтная загрузка полного набора метаданные из iTunes Store, App Store и Mac App Store. EPF доступный для веток, чтобы полностью включить аспекты iTunes и каталогов App Store на веб-сайт или приложение. Этот инструмент предназначен только для технически подкованных веток, а также знание настройки реляционных баз данных обязательный. Apple не будет предоставлять техническую поддержку для настройки или поддерживая этот инструмент.

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

После дальнейшего изучения технической документации ERPF выяснилось, что одна из таблиц в базе данных содержит 1000 лучших приложений по жанру:

application popularity table

Итак, сначала вы должны импортировать данные в свою собственную базу данных, начиная с еженедельного (многогигабайтного) выпуска, а затем применять любые ежедневные (с несколькими мегабайтами) обновления, доступные с недельного выпуска. Согласно Apple, разница между ними:

Режимы подачи

iTunes генерирует данные EPF в двух режимах:

  • полный режим

  • инкрементный режим

Полный экспорт генерируется еженедельно и содержит полный снимок метаданных iTunes со дня поколение. Инкрементный экспорт создается ежедневно и содержит записи, которые были добавлены или изменены с момента последнего полного экспорта. Поэтапный экспорт расположен по отношению к полному экспорту на которые они основаны.

Если вы импортировали данные в реляционную базу данных, вы должны получить необходимые данные с помощью простого оператора SELECT, аналогичного этому:

SELECT application.title, applicationpopularityper_genre.application_rank 
FROM applicationpopularityper_genre 
JOIN application 
  ON application.application_id = applicationpopularityper_genre.application_id
WHERE applicationpopularityper_genre.genreid = XX
ORDER BY applicationpopularityper_genre.application_rank ASC;

Что касается ежечасных обновлений - просмотрев реляционную структуру, я вижу, что доступен столбец export_date. Вы должны проверить, есть ли у вас несколько дат для каждого приложения при выполнении выбора выше - если вы это сделаете, у вас есть данные с более тонкой детализацией, чем день. Если нет (что более вероятно), и для вас это деловой разбойник, вы должны посмотреть на использование приложений Appannie и других, которые я уже предложил, которые обогащают эти данные данными, которые они получают от разработчиков через itunes connect. Если вы хотите, чтобы информация была бесплатной, вы можете попытаться очистить ее от Appannie (есть некоторые бесплатные инструменты, которые делают это, но вы должны знать, что это может быть не очень надежным в долгосрочной перспективе, поэтому вам может быть лучше заплатить);

Обновление 2:

Партнерская команда iTunes подтвердила, что они знают о проблеме с этой таблицей.

Надеюсь, это ответит на ваш вопрос.

Ответ 3

Можно было бы очистить данные из AppAnnie?

Используемые phantomjs и casperjs для очистки 500 лучших бесплатных, оплаченных и кассовых.

  • Установите phantomjs и casperjs в вашей системе.
  • В терминале: casperjs appAnnieTop500Scraper.js

Пример вывода

Free Apps
500 apps found:
// not shown: app names in json array format
// json array on file: freeTop500.json
Paid Apps
500 apps found:
// not shown: app names in json array format
// json array on file: paidTop500.json
Grossing Apps
500 apps found:
// not shown: app names in json array format
// json array on file: grossingTop500.json

appAnnieTop500Scraper.js

var free = [];
var paid = [];
var grossing = [];

var FREE_COLUMN_INDEX = 1;
var PAID_COLUMN_INDEX = 2;
var GROSSING_COLUMN_INDEX = 3;

var fs = require('fs');
var casper = require('casper').create();
casper.on("click", function() {
  this.echo();
});
casper.on("page.error", function() {
  this.echo();
});

function getAppListScraper(columnIndex) {
  var selector = document.querySelectorAll('tbody#storestats-top-table tr td:nth-child(' + columnIndex + ') div.item-info div.main-info span.title-info');
  return Array.prototype.map.call(selector, function(e) {
    return e.getAttribute('title');
  });
}

function printToConsole(casper, appList) {
  casper.echo(appList.length + ' apps found:');
  casper.echo(JSON.stringify(appList));
}

function writeToFile(fileName, content) {
  fs.write(fileName, content, 'w');
}

casper.start('https://www.appannie.com/apps/ios/top/?device=iphone', function() {
  // click load all button to load 500 apps list
  this.click('div#load-more-box span.btn-load p a.load-all');

  // wait 5000ms for the apps list to load then scrape it
  this.wait(5000, function() {
    free = this.evaluate(getAppListScraper, FREE_COLUMN_INDEX);
    paid = this.evaluate(getAppListScraper, PAID_COLUMN_INDEX);
    grossing = this.evaluate(getAppListScraper, GROSSING_COLUMN_INDEX);
  });
});

casper.run(function() {
  this.echo('Free Apps');
  printToConsole(this, free);
  writeToFile("freeTop500.json", JSON.stringify(free));

  this.echo('Paid Apps');
  printToConsole(this, paid);
  writeToFile("paidTop500.json", JSON.stringify(paid));

  this.echo('Grossing Apps');
  printToConsole(this, grossing);
  writeToFile("grossingTop500.json", JSON.stringify(grossing));

  this.exit();
});