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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
#1

Создание RSS агрегатора - C++

04.07.2012, 21:23. Просмотров 1726. Ответов 30
Метки нет (Все метки)

возникла срочная необходимость создать простенький RSS,который получает новости,а отображает их в дефолтном браузере,однако ни с чем подобным не сталкивался прежде.я не прошу готовый код,я лишь прошу подсказать мне какие шаги нужно сделать,если вы знаете уже сделанный пример,скиньте пожалуйста ссылку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2012, 21:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание RSS агрегатора (C++):

Поиск по .txt файлу (RSS) - C++
Доброго времени суток. Пытаюсь придумать что-нибудь, чтобы работать с RSS без крутых кодов, что-то типа индусского кода. Сделал парсинг...

Создание RSS - PHP
Здрасте. Подскажите я уже разобрался как создать xml -файл через данные с БД.Меня интересует вопрос: какими способами обновляют данные...

Создание RSS реадера - Программирование Android
Я хочу прикрутить RSS ленту к pull to refresh Тоесть не выводить на екран всю ленту, а частями при перетягивании екрана не могу...

Создание Rss ридера - PHP
Мне нужно прочитать RSS канал и вывести его на страничку, это можно сделать с помощью уже готовых скриптов, они слишком грамоздкие и...

Создание RSS ленты канала YouTube - PHP
Всем здрасти! Понадобилось создать RSS ленту своего канала YouTube. Посидел, погуглил и накопал следующий рецепт: ...

Создание RSS на базе Material Design - Программирование Android
Добрый день! Подсел на тему Материал Дизайн. Уж очень она мне понравилась. Сам никогда не разрабатывал приложения под андроид, а тут...

30
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
09.07.2012, 01:47 #16
Ну наверное следовало бы и сам xml выложить, ошибку указать
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
09.07.2012, 01:53 #17
Цитата Сообщение от alexey31415 Посмотреть сообщение
C++
1
element = element->FirstChildElement("item")//здесь ошибка
Ну здесь-то и в самом деле ошибка. Не хватает точки с запятой в конце. Или кто-то нас дурит и точка с запятой там есть?
0
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
09.07.2012, 02:24  [ТС] #18
Цитата Сообщение от grizlik78 Посмотреть сообщение
точка с запятой там есть
да это тогда было,я конечно поставил ;
вот файл
а вот код,что есть на данный момент
C++
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
#include "tinyxml.h"
#include "tinystr.h"
 
#include<iostream>
 
using namespace std;
 
#pragma comment(lib, "tinyxml.lib")
 
int main()
{
 TiXmlDocument doc("C:/data.xml");
 
 /*TiXmlDeclaration dec; 
 dec.Parse( "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>", 0, TIXML_ENCODING_UTF8 ); 
 doc.InsertEndChild( dec );
 
 doc.SaveFile();*/
 
 bool LoadOK = doc.LoadFile();
 
 if(!LoadOK)
 {
  cout << "error\n";
  system("pause");
  return 0;
 }
 
 TiXmlElement *rss = doc.FirstChildElement("rss");
 
 TiXmlElement *channel = rss->FirstChildElement("channel");
 
 channel = channel->FirstChildElement("title");
 
 int count = 0;
 
 while(channel != NULL)
 {
  TiXmlElement *title = channel->FirstChildElement("title");
  cout << title->GetText() << endl;
  channel=channel->NextSiblingElement();
 }
 
 system("pause");
 
 return 0;
 
}
Добавлено через 2 минуты
xml файл
0
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
09.07.2012, 02:33  [ТС] #19
выкидывается ошибка
и открывается файл со следующей функцией
C++
1
2
3
4
5
6
7
8
9
10
const TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const
{
    const TiXmlNode* node;
    for ( node = firstChild; node; node = node->next )
    {
        if ( strcmp( node->Value(), _value ) == 0 )//сюда указывает стрелка,значит ошибка в этой строке
            return node;
    }
    return 0;
}
0
Миниатюры
Создание RSS агрегатора  
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
09.07.2012, 16:41 #20
Выложите C:/data.xml

Как я понимаю можно использовать еще libxml2 как парсер.
( http://www.cyberforum.ru/blogs/131347/blog538.html )
0
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
09.07.2012, 17:37  [ТС] #21
тут файл и код
0
Вложения
Тип файла: zip Архив ZIP - WinRAR.zip (716 байт, 11 просмотров)
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
09.07.2012, 17:44 #22
Пробовал открыть свой файл через браузер?
0
Миниатюры
Создание RSS агрегатора  
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
09.07.2012, 17:49  [ТС] #23
у меня сафари открывает
0
Вложения
Тип файла: rar архив.rar (2.7 Кб, 6 просмотров)
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
09.07.2012, 17:54 #24
Нужно как-то делать проверку что xml не пуст.

Попробуй код из википедии http://ru.wikipedia.org/wiki/XML

Просмотреть код
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<recipe name="хлеб" preptime="5" cooktime="180">
  <title>Простой хлеб</title>
  <composition>
    <ingredient amount="3" unit="стакан">Мука</ingredient>
    <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
    <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
    <ingredient amount="1" unit="чайная ложка">Соль</ingredient>
  </composition>
  <instructions>
    <step>Смешать все ингредиенты и тщательно замесить.</step>
    <step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
    <!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... -->
    <step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
  </instructions>
</recipe>


Добавлено через 3 минуты
у меня сафари открывает
А у меня Opera нет
0
Миниатюры
Создание RSS агрегатора  
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
09.07.2012, 17:59  [ТС] #25
я скопировал текст
0
Вложения
Тип файла: rar архив.rar (5.5 Кб, 8 просмотров)
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
09.07.2012, 18:08 #26
Таже ошибка.

Вообщем проблема как я понимаю самом xml, плюс ты не делал проверки.

Добавлено через 6 минут
Наверное не правильно скачал или скопировал xml там в начале левые символы если их убрать, то открывается нормально.
0
Миниатюры
Создание RSS агрегатора  
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
09.07.2012, 18:21  [ТС] #27
а как их убрать?
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
09.07.2012, 18:22 #28
а как их убрать?
А как они там появились?
Я просто в блокноте рукам вырезал и все.
0
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
09.07.2012, 18:24  [ТС] #29
вот так я полчаю файл
C++
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
#include<iostream>
#include<fstream>
#include<WinSock2.h>
#include<Windows.h>
#include<cstring>
#include <stdio.h>
#include<new>
 
using namespace std;
 
#pragma comment(lib, "ws2_32.lib")
 
WSADATA wsd;
SOCKET s;
struct sockaddr_in addr;
struct hostent * ip;
char query[128];
 
 
std::ofstream F("C:\\data.xml",std::ios::binary);
 
int main()
{
    
    WSAStartup(MAKEWORD(2,2),&wsd);
 
    int sock=socket(AF_INET,SOCK_STREAM,0);
    ip=gethostbyname("kp.ua");
    
    addr.sin_family=AF_INET;
    memcpy(&(addr.sin_addr),ip->h_addr_list[0],sizeof(addr.sin_addr));
    addr.sin_port=htons(80);
 
    connect(sock,(struct sockaddr*)&addr,sizeof(addr));
 
    char query[8096];
  
 
    char *buffer = new char[1024];
 
    char * p = new char[1024];
 
    strcpy(buffer,"");
    int k;
    strcpy(query,"GET /rss/feed.xml HTTP/1.0\r\nHost:kp.ua\r\n\r\n");
 
    send(sock,query,strlen(query),0);
    
 
    int h=1;
    while ((k=recv(sock,buffer,1024,0))>0)
    {
        p=strstr(buffer,"\r\n\r\n");
        if (p!=NULL && h)
        {
            F.write(p+4,k);
            h=0;
        }
        else
        {
        F.write(buffer, k);
        }
        strcpy(buffer,"");
    }
 
    F.close();
   
    closesocket(s);
 
    WSACleanup();
 
    system("pause");
 
    return 0;
}
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
09.07.2012, 18:27 #30
Ну я с сокетами не имел дела так что не подскажу...
Но думаю проблема в этом...
0
09.07.2012, 18:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 18:27
Привет! Вот еще темы с ответами:

Создание RSS-reader с оффлайн базой - C#
нужно создать программу в Windows Forms, т.е. рсс ридер с оффлайн базой,но вся проблема для меня - именно оффлайн база! как её сделать ?

Количество новостей rss ленты и подключения несколько rss лент - PHP
Здравствуйте, возник такой вопрос, у меня есть rss-лента, одна она работает &lt;?php $rss = simplexml_load_file (...

RSS - HTML, CSS
как сделать так,чтобы картинка подписки на RSS была в адресной строке?!

rss - DLE
хочу поставит на сайт рсс летну новостей . захожу в &quot;Управление RSS информерами на сайте&quot; ввожу адрес...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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