Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
#1

Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей - Android

24.01.2014, 23:53. Просмотров 1420. Ответов 11
Метки нет (Все метки)

Задача в том, чтобы установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей и сами эти новости. Как это можно реализовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 23:53     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей
Посмотрите здесь:

Android Парсинг сайта новостей
Android Как всё время поддерживать соединение андроид приложения с веб-сервером?
Android HttpURLConnection - не читает заголовки и контент
Android Соединение с сервером, передача данных
Android Заголовки вкладок SlidingTab
Приложение с сервером Android
Соединение с сервером Apache Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
25.01.2014, 00:18     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #2
Вот как там хранятся финансовые новости
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<span>
                        <a data-type="finances__2_2" data-rbc-tk-id="54zD6aV2rhM" href="http://quote.rbc.ru/topnews/2014/01/24/34103326.html" class="black tk-link">Рынок акций провалил попытку отыграть недавние потери</a>                                           </span>
                                    <span>
                        <a data-type="finances__2_3" data-rbc-tk-id="9ABoAdqnwoR" href="http://lf.rbc.ru/recommendation/finance/2014/01/24/235624.shtml" class="black tk-link">Банки: инструкция по применению</a>                                          </span>
                                    <span>
                        <a data-type="finances__2_4" data-rbc-tk-id="8BaBTWHYR6A" href="http://quote.rbc.ru/topnews/2014/01/24/34103003.html" class="black tk-link">Российские "медведи" не желают сдавать позиций</a>                                          </span>
                                    <span>
                        <a data-type="finances__2_5" data-rbc-tk-id="7nxAeFkIdk" href="http://lf.rbc.ru/recommendation/finance/2014/01/24/235626.shtml" class="black tk-link">Биржа в один клик: как самостоятельно покорить фондовый рынок</a>                                         </span>
                                    <span>
                        <a data-type="finances__2_6" data-rbc-tk-id="4gS4zsjL1Qo" href="http://quote.rbc.ru/topnews/2014/01/24/34102937.html" class="black tk-link">Все надежды евро связаны с ростом экономики Германии</a>                                            </span>
                                    <span>
                        <a data-type="finances__2_7" data-rbc-tk-id="2cUzITZhr2J" href="http://lf.rbc.ru/recommendation/finance/2014/01/23/235595.shtml" class="black tk-link">Пенсионные маневры: как дожить до заслуженного отдыха</a>                                            </span>
                                    <span>
                        <a data-type="finances__2_8" data-rbc-tk-id="66lGwYfDL3" href="http://quote.rbc.ru/topnews/2014/01/24/34102844.html" class="black tk-link">Сокращение запасов дистиллятов подтолкнуло вверх цены на WTI</a>                                         </span>
                                    <span>
                        <a data-type="finances__2_9" data-rbc-tk-id="75eEyr8UBpk" href="http://rating.rbc.ru/article.shtml?2013/12/18/34084558" class="black tk-link">Крупнейшие региональные банки России</a>                                          </span>
                                    <span>
                        <a data-type="finances__2_10" data-rbc-tk-id="aem5dWW1405" href="http://rating.rbc.ru/" class="black tk-link">Рейтинг районов Москвы: Итоги 2013 года</a>                                           </span>
                                    <span>
                        <a data-type="finances__2_11" data-rbc-tk-id="aHe86K7J6V5" href="http://realty.rbc.ru/articles/01/10/2013/562949989082215.shtml" class="black tk-link">Когда ждать кризис на рынке недвижимости: эксперты назвали дату</a>                                          </span>
Как видишь текст заголовков новостей в теге <a> c атрибутом data_type="finances_***.
Таким образом делаешь пост запрос на сайт после чего делаешь парсер соответственно до атрибута.
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
25.01.2014, 00:21  [ТС]     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #3
ASDFD12, как сделать пост-запрос на сайт и парсер до атрибута? Не знаком с этими вещами.
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
25.01.2014, 01:20     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #4
по поводу запроса
http://suvitruf.ru/2013/06/11/3243/
для парсинга можно регулярки юзать или загуглить как html или что там у вас парсить
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
26.01.2014, 11:56  [ТС]     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #5
Подскажите плз параметры GET-запроса для того, чтоб сервер вернул заголовки новостей, например, с http://sport.rbc.ru/. Насколько я понял, запрос представляет собой строку вида: http://example.com?Parameter1=Parame...arameter2Value. Не шарю в html..

Добавлено через 44 минуты
С парсингом вроде всё понятно на первый взгляд, буду использовать класс HTML Parser. Но вот в моём способе отправки запросов (создал класс QueryClass с нужными для этого методами) не приходит никаких ответов с сервера. Код скину завтра.

Добавлено через 13 часов 36 минут
код класса:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.example.mercuryweb;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
 
import android.util.Log;
 
public class QueryClass {
    
    private StringBuffer query;
    private static final String TAG = "myLogs";
    
    //метод для Формирования строк запроса на сервер
    //строка параметров состоит из пар <имя параметра>=<значение_параметра>, разделённых знаком &
    //в случае с GET запросом, к строке таких пар в начале добавляется знак вопроса '?'
    public StringBuffer QueryString(Object name, Object value) //throws UnsupportedEncodingException
    {
    query = new StringBuffer();
    
    if (!query.toString().equals("")) query.append("&");
    try {
        query.append(URLEncoder.encode(name.toString(), "UTF-8"));
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    query.append("=");
    try {
        query.append(URLEncoder.encode(value.toString(), "UTF-8"));
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.w(TAG, "Исключение в методе QueryString");
    }
    return query;
    }
    
    
    //метод читает данные из входного потока (в свою очередь, возвращаемого методом getInputStream()),
    //и формирует из них строку, сделан для упрошения чтения html данных, получаемых от сервера.
    private String readStreamToString(InputStream in, String encoding)
            throws IOException {
        StringBuffer b = new StringBuffer();
        InputStreamReader r = new InputStreamReader(in, encoding);
        int c;
        while ((c = r.read()) != -1) {
            b.append((char)c);
        }
        return b.toString();
    }
    
    
    //метод для отправки сформированного GET-запроса
       public String getQuery(String url, StringBuffer query) //throws IOException
       {
        //URLConnection - класс, который отвечает за работу по HTTP протоколу,
        //он предоставляет множество методов, по настройке соединения, таймаутов, соединение, работу с потоками
        
        //устанавливаем соединение
        URLConnection conn = null;
        try {
            conn = new URL(url + "?" + query).openConnection();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.w(TAG, "Исключение MalformedURLException в методе getString");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.w(TAG, "Исключение IOException в методе getString");
        }
        //заполним header request парамеры, можно и не заполнять
        conn.setRequestProperty("Referer", "http://google.com/");
        conn.setRequestProperty("Cookie", "a=1");
        //можно установить и другие парамеры, такие как User-Agent
        
        //читаем то, что отдал нам сервер
        String html = null;
        try {
            html = readStreamToString(conn.getInputStream(), "UTF-8");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return html;
        
    }
    
}
вызов в MainActivity:

Java
1
2
3
4
5
6
7
 private void UpdateNews(boolean enableNotification)
     {
         if (enableNotification) Toast.makeText(mContext, "синхронизация с сайтом", Toast.LENGTH_SHORT).show();
         
         QueryClass qc = new QueryClass();
         tv1.setText(qc.getQuery("http:\\google.com", qc.QueryString("","")));
     }
в чём может быть ошибка?

Добавлено через 9 минут
>tv1.setText(qc.getQuery("http:\\google.com", qc.QueryString("","")));

слэши не в ту сторону) ответ есть. будем дальше разбираться.

Добавлено через 47 минут
Проблема остаётся: гугл возвращает нормальную строку, rbc.ru не возвращает ничего..
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
26.01.2014, 13:40  [ТС]     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #6
короче, хелп! не могу никак понять, где в возвращённой строке эти самые заголовки. если смотреть через Google Chrome, на странице они есть (см. скрин). А в том, что мне возвращает сервак - нет (пишу для удобства в rbc.txt). второй момент - сбивается русская кодировка. при вызове конструктора InputStreamReader(in, encoding) (куда подставляется поток, возвращённый conn.getInputStream()) подставляется "UTF-8".
Миниатюры
Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей  
Вложения
Тип файла: txt rbc.txt (19.2 Кб, 3 просмотров)
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
26.01.2014, 20:55  [ТС]     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #7
если сохранить мобильную версию страницы в Chrome (m.rbc.ru), то в htm есть например вот это (рандомный кусок вставил):
Кликните здесь для просмотра всего текста
<div class="rbc block opened">
<a class="topnews header contentToggle">
Главные новости
<span class="info">обновлено 14:17 26/01/2014</span>


а в моём файле этого нет. Вопрос: как "обмануть" сайт и сделать так, чтоб он возвращал полную версию?

Добавлено через 6 часов 21 минуту
ни у кого нет хотя бы предположений:
1. Почему содержимое файла rbc.txt которое я получаю посредством qc.getQuery("http://www.rbc.ru/", qc.QueryString("",""), false) отличается от того, что находится в сохранённой htm-странице, если открывать m.rbc.ru Chrome'ом.
2. Почему сбиваются русские символы, если везде прописано "UTF-8".
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
26.01.2014, 22:15     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #8
1. попробуйте в качестве User-agent при обращении к серверу указать обычный браузер
2. вы уверены что возвращается именно в utf8, а не в какой-нибудь cp1251?
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
27.01.2014, 12:32  [ТС]     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #9
NiRamz, не уверен. если открывать вот это http://m.rbc.ru/json/news/rbc/sportn...20140127104600 напрямую из Chrome, то кодировка тоже сбитая.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
27.01.2014, 12:34     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #10
в настройках хрома смените на utf8 и все станет нормально
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
27.01.2014, 14:41  [ТС]     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #11
NiRamz, кодировка там WIN1251 оказываетс. вызов такой должен быть: html = readStreamToString(conn.getInputStream(), "windows-1251");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 15:20     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей
Еще ссылки по теме:

Android Хранение и кэширование новостей
Оптимизация списка новостей Android
Android Пропадает соединение с сервером
Android C++ приложение на Android ищу книжки про соединение приложения с сервером
Android Заголовки TabView в одну строку

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
27.01.2014, 15:20     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей #12
возможно, я отписал что увидел в браузере.

для чтения потоков использую common-io, очень удобно. Одной строкой можно перегнать любой поток в строку. Это так, для общей кучи да и работает пошустрее нежели чем в цикле перегонять
Yandex
Объявления
27.01.2014, 15:20     Установить соединение с веб-сервером rbc.ru и вычитывать с него заголовки новостей
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru