![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Shklyar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
Добрый день.
Вот решил делать RSS клиент как свою первую программу на Java. Подскажите: 1. Что обязательно к прочтению? 2. Какие необходимы классы? Мысли такие: непосредственно RSSReader, он будет создавать Article-ы и где-то должен присутствовать SubscriptionToFeeds. А где использовать интерфейсы? Может где-то паттерн? Какой? И что из API мне нужно? Спрашиваю т.к. опыта нет.. Спасибо. --------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну для начала почитай описание формата RSS и про сам XML. Потом парсинг XML в Java (есть пара статей в FAQ).
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Shklyar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
Почитал, научился парсить XML (по примеру из FAQ, более детально буду разбираться непосредственно при решении своей задачи). Подскажите, что такое RSS парсер.
2. Помогите представить общую картину желаемого приложения (все-же хочу начать с uml диаграммы классов). --------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
|||
|
||||
| Shklyar |
|
||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
Несмотря на то, что какого-то представления о том, как будет выглядеть программа целиком у меня нет, я решил попробовать написать ту часть, где происходит парсинг XML или RSS? Собственно вот код. Покричите, подскажите как правильно писать.
И появился ряд маленьких вопросов: 1. Тут, как и в примере из FAQ, с которого я это делал, xml читаем из файла. А как в реальном клиенте? Т.е. как изменится строчка
2. JavaDoc. Что нужно комментировать, а что нет? 3. RSS. Если посмотрите мой пример xml-я - увидите, что сперва идет <channel> со своим описанием, потом - <item>-ы. Как и зачем использовать описания <channel> (интересует логика, как прочитать как-бы понятно)? 4. Есть разные форматы RSS, значит мне надо наследовать мой SAXHandler и реализовать наследников для разных форматов? ЗЫ: тут можно использовать паттерн абстрактная фабрика (как-то просматривал статьи про паттерны, могу все путать)? 5. Планирую сделать "caching of articles", ну т.е. писать все в БД. Подскажите, как различать новые итемы от существующих (наверное сравнивать какие-то поля. какие поля? есть какое-то общепринятое решение)? 6. По тестам. Что необходимо тестить в приведенном коде? 7. Последнее. Класс Article. Полей в нем достаточно? --------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
||||||||||||
|
|||||||||||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
Для полноты картины: wiki: RSS (внизу есть ссылки на спецификации), Open Source RSS & RDF Tools in Java(На случай если вдруг вы захотите использовать готовые решения, а не изобретать своё);
1. В реальном клиенте, а точнее в классе/интерфейсе, предназначенном непосредственно для использования в клиентском коде, будет куча одноимённых методов, различающихся типом входных параметров. Например содержимое входного xml может быть предано как String, File, InputStream и т.д. Естественно никакого handler'а в параметрах не будет - это наше дело, каким способом мы парсим xml. 2. Комментировать лучше всё, а вот JavaDoc формировать по классам/пакетам, которые могут быть использованы клиентом, исключив private поля/методы/внутренние классы; 3. См. первую ссылку. 4.
Не факт. Как вы будете определять объект какого класса инстанциировать? Заставлять клиента определять? - Нехорошо. На основе содержимого xml - для этого нужно его распарсить. Может лучшим решением будет распарсить в каком то общем виде, определить формат, а потом уже сформировать ответ для клиента. 5. См. первую ссылку. 6. Ну классы модели, представляющие из себя POJO классы, по моему, тестировать ни к чему. Тестировать надо функционал, логику работы самого парсера. На вход даёте, заранее определённый xml, получаете результат и проверяете его. 7. См. первую ссылку. Кстати, по моему, результат работы парсера, лучше выдавать как объект одного класса, например RSSChannel или типа того. В качестве резюме, попробую всё таки посоветовать использовать готовое решение, а не "изобретать велосипед". |
|||
|
||||
| Nudnik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.9.2007 Репутация: нет Всего: нет |
а не красивее ли будет попробовать с помощью JAXB?
|
|||
|
||||
| Shklyar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
Цель этой программы - получить опыт, маленький. Вот и приглянулась мне идея RSSClient-а, так программа будет включать работу с xml, с БД, чем-то еще. По этому, как для обучения, наверное, лучше "изобретать велосипед".
Подскажите что счас (маленькое) сделать? Сенкс. --------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Продолжай делать свой RSS клиент. Раз с парсингом XML разобрался, делай получение RSS из интернета (поищи по форуму: URL openConnection) . Потом попробуй совместить код парсинга и чтения из интернета.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Shklyar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
Дык а это не HTTPClient (такое когда-то делал)?
--------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Можно и HTTPClient использовать, раз ты с ним знаком.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Shklyar |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
И вызываю его:
А как модифицировать
--------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
||||||
|
|||||||
| Shklyar |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
Переделал, чуток HTTPClient:
И вызываю все так:
И получаю org.xml.sax.SAXParseException: Premature end of file. Почему? --------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
||||||
|
|||||||
| Shklyar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
К предыдущему посту:
Что происходит - понятно (функция httpClient.getISAnswer() возвращает некую пустоту), но почему? ЗЫ: плохое имя придумал для переменной "isAnswer", как answer типа InputStream, очень смахивает на boolean "это answer?". Посоветуйте лучшее имя. Добавлено через 2 минуты и 49 секунд Классссс --------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
|||
|
||||
| Shklyar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 28.11.2007 Где: Kyiv Репутация: 2 Всего: 3 |
К предыдущему посту:
Что происходит - понятно (функция httpClient.getISAnswer() возвращает некую пустоту), но почему? ЗЫ: плохое имя придумал для переменной "isAnswer", как answer типа InputStream, очень смахивает на boolean "это answer?". Посоветуйте лучшее имя. --------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Не надо никакого BufferedReader и чтения в промежуточный буфер. Скармливай парсеру просто InputStream, тот сам с кодировкой разберется.
Просто добавь в твой SAXHandler метод парсинга. Передаеш туда URL, он открывает URLConnection и сразу же парсит полученный результат. После чего закрывает соединение. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |