Разбор HTML-контента для использования с приложением iPhone - PullRequest
3 голосов
/ 04 ноября 2011

Я даже не знаю, подходит ли название для этого вопроса, так как я действительно потерян и нуждаюсь в каком-то совете, отправной точке для того, что мне нужно сделать.

Приложение для iPhone воспроизводит аудиотранслировался из интернета, с моим заказным плеером.Некоторые ссылки - прямые трансляции с Akamai, а другие - аудиофайлы, хранящиеся на сайте .Я в порядке с живыми потоками, но моя проблема с аудиофайлами .

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

Веб-сайт организован так:

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

Мой вопрос: как я могу проанализировать этот контент, с программами и днями недели, чтобыВыбери из?Должен ли я посмотреть на разбор HTML?Есть ли лучший / более простой способ, например создание XML-файлов на веб-сайте?

Если это помогает, все веб-страницы заканчиваются расширением .aspx .

Пожалуйста, любой совет от более опытного программиста очень поможет мне.Спасибо!

Ответы [ 5 ]

2 голосов
/ 13 ноября 2011

У меня была похожая потребность.Использование данных с сайта ASP.NET.В конце я использовал JSON со стороны .NET и вернул JSON.Затем я использовал json-framework из Google Code для преобразования JSON, возвращенного в NSDictionary.Оттуда остальное - история.

Если вы используете .NET MVC, то возвращать результаты JSON очень просто в контроллере.Поскольку у вас есть расширения aspx, я предполагаю, что это не так.Внизу главной страницы json.org есть тонны JSON-анализаторов для C #.

2 голосов
/ 12 ноября 2011

Я не думаю, что разбор HTML был бы лучшей реализацией здесь. Перейдите к структурированному источнику, который не имеет видимой разметки, чтобы беспокоиться о разборе или игнорировании вообще (также будет означать меньше ресурсов, выделяемых при разборе разметки, потому что вы будете анализировать только то, что имеет значение).

Я бы предложил использовать источник XML или JSON, который можно преобразовать в NSDictionary или другую структуру данных для использования приложения. Вот небольшой класс, который преобразует источник XML в NSDictionary: http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/

TBXML - еще один облегченный синтаксический анализатор XML для Objective-C, который позволяет реализовать пользовательский объект данных до вас: http://www.tbxml.co.uk/

Если вы предпочитаете использовать JSON, есть несколько помощников. Хорошее место для начала было бы здесь: http://cocoaobjects.com/?s=json

Если я правильно понял ваш вопрос, какой бы источник вы ни выбрали, вы, вероятно, захотите получить словарный объект, который выглядит примерно так:

programs = (
  {
    program_name: "Foo";
    tracks = (
      { day: Monday;
        track: audio_file1.mp3;
      },
      { day: Tuesday;
        track: audio_file2.mp3;
      },
      { day: Wednesday;
        track: audio_file3.mp3;
      }
    );
  },
  {
    program_name: "Bar";
    tracks = (
      { day: Monday;
        track: audio_file4.mp3;
      },
      { day: Tuesday;
        track: audio_file5.mp3;
      },
      { day: Wednesday;
        track: audio_file6.mp3;
      }
    );
  },
  {
    program_name: "Baz";
    tracks = (
      { day: Monday;
        track: audio_file7.mp3;
      },
      { day: Tuesday;
        track: audio_file8.mp3;
      },
      { day: Wednesday;
        track: audio_file9.mp3;
      }
    );
  };
);

После того, как вы обработали свой источник данных и преобразовали его в собственный объект данных для работы в Obj-C, вы сможете приступить к написанию кода пользовательского интерфейса, который может выполнять итерацию по словарю для предоставления списка. программ и, в свою очередь, список дней для каждой программы с сопровождающими аудио файлами для выбора для воспроизведения.

1 голос
/ 14 ноября 2011

Думайте нестандартно: используйте UIWebView

Как насчет того, чтобы вместо того, чтобы думать о том, как анализировать данные, а затем писать код пользовательского интерфейса, чтобы отобразить их, мы больше думаем об общей картине: мы хотим представить пользователю iPhone последовательность экранов для выбора и воспроизведения записи, и это должно произойти с веб-сервера. Только если бы был такой инструмент ... но подождите, есть! Он называется веб-браузером, и в форме UIWebView вы можете интегрировать его в свой интерфейс с небольшим изюминкой.

Во-первых, добавить UIWebView очень просто, проверьте это http://zpasternack.blogspot.com/2010/09/stupid-uialertview-tricks-part-i.html для иллюстрации.

Итак, допустим, мы добавили веб-просмотр, и пользователь может выбрать оттуда аудиофайл, что будет потом? Оказывается, вы можете сказать ему, что должно произойти, проверьте этот вопрос UIWebView открыть ссылки в Safari . Вы можете подключить свой код к обработке ссылок на ссылки и делать все, что пожелаете (например, скрыть веб-просмотр и показать проигрыватель и т. Д.).

Чтобы привести пример, скажем, сначала в веб-представлении вы загружаете
http://foobar.com/somepath/listOfPrograms
это веб-страница со списком программ (спасибо, что на каком-то умном CSS может выглядеть как UITableView, если хотите). Пользователь нажимает на имя программирования, которое идет к
http://foobar.com/somepath/programs/CarTalk
на какой странице представлен список еженедельных показов (снова в формате iPhonesque), и при нажатии на ссылку это теперь указывает на
http://audio.foobar.com/somesuch/45678913.mp3
в этот момент ваш код распознает аудио-URL, воспринимает управление и воспроизводит его, как ему угодно.

Насколько полезно, что вы можете задаться вопросом. Ответ " очень " :-). Он перемещает структуру представления из приложения - и на веб-сервер. Вход приложения в UIWebView - это начальный URL, а выход - щелчок по ссылке на аудиофайл. Через несколько месяцев кто-то решает, что он хочет, чтобы выбор не был сделан первым именем программы, а затем днем ​​недели; или добавить дополнительный слой выбора по языку или стране. Нет проблем, нет необходимости выпускать новую версию приложения, просто немного подправьте веб-страницы на сервере, и приложение автоматически подберет его.

Это также облегчает тестирование на стороне веб-сервера - просто наведите любой браузер на начальный URL-адрес страницы и кликните, чтобы увидеть, сможете ли вы сделать это для жизнеспособного аудиофайла. Веб-мастер может справиться с этим независимо от вас, автора приложения. Вам даже не нужно заботиться о том, что они используют для получения этих страниц, жестко ли они запрограммированы в html или взяты из базы данных SQL, XML tarpit и т. Д.

1 голос
/ 12 ноября 2011

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

Так, например, предположим, что таблица

+----------------------------------------------------------------------+
| Filename                        | Language          | Date           |
+----------------------------------------------------------------------+
| kjslfiewofksalfjslfakj          | Swahili           | 2011-11-01     |
| shfaahflajfewifhlanfww          | Guyanese          | 2011-10-08     |
| weijalfjlajfljalsfjewn          | French            | 2011-11-01     |
| fiwojancanlsjfhkwehwlk          | Swahili           | 2011-11-01     |
| fhalksflwiehlfnaksflhw          | Swahili           | 2011-11-03     |
+----------------------------------------------------------------------+

Хорошо, так что, если Джо Шмо достигнет страницы дляshow от 2011-11-01 и его язык - суахили, будут возвращены две строки:

+----------------------------------------------------------------------+
| Filename                        | Language          | Date           |
+----------------------------------------------------------------------+
| kjslfiewofksalfjslfakj          | Swahili           | 2011-11-01     |
| fiwojancanlsjfhkwehwlk          | Swahili           | 2011-11-01     |
+----------------------------------------------------------------------+

Вы также можете легко добавить ссылки на дату и язык, которые указывают запись Akamai.Это не кажется мне очень сложным, но это может означать значительный редизайн для вас.Тем не менее, вы целенаправленно расплывчаты в деталях, так что, надеюсь, по крайней мере, это укажет вам правильное направление.

Редактировать :

Хорошопоэтому после перечитывания может быть относительно простой способ управления контентом в его организации с помощью структур каталогов, но он занимает заднее место в моей предложенной таблице.

Насколько я понимаю, потенциально существует трикатегории на работе: программа , дата и язык .

Если я создаю структуру файла (в предположении root):

/public_html/audio/[date]/[language]/[program_name].mp4

Затем, когда пользователь выбирает дату и язык, у нас может быть:

/public_html/audio/2011-11-14/swahili/the_linux_show.mp4

Затем все, что нам нужно сделатьЧтобы получить представление, нужно получить данные $_POST от селекторов ... К сожалению, это будет означать, что мы должны знать дату трансляции шоу, затем язык, а затем название шоу.Это было бы намного хуже, чем база данных, но можно было бы сделать.Используйте ASP для чтения содержимого каталога, и вы можете составить список с помощью циклов.Кажется довольно простым, но совсем не элегантным.

1 голос
/ 10 ноября 2011

если содержимое веб-сайта статично, я бы жестко закодировал имена файлов и соответствующие URL-адреса для вашего сервера в приложении и позволил бы пользователю просматривать список доступных элементов.

если содержимое веб-сайта изменится, я создам файл XML на сервере, который ваше приложение загружает при запуске (или, по вашему усмотрению), и анализирует в приложении, а затем продолжит работу в соответствии со статическим содержимым.

надеюсь, что это заставит вас двигаться в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...