Logo Search packages:      
Sourcecode: gsoap version File versions

rss.c

/*

RSS 0.91 and 2.0

Retrieve RSS feeds.

Usage: rss URL
Prints RSS content.

--------------------------------------------------------------------------------
gSOAP XML Web services tools
Copyright (C) 2001-2004, Robert van Engelen, Genivia, Inc. All Rights Reserved.
This software is released under one of the following two licenses:
GPL or Genivia's license for commercial use.
--------------------------------------------------------------------------------
GPL license.

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA

Author contact information:
engelen@genivia.com / engelen@acm.org
--------------------------------------------------------------------------------
A commercial use license is available from Genivia, Inc., contact@genivia.com
--------------------------------------------------------------------------------
*/

#include "soapH.h"

#define STR(s) (s?s:"")

#define DEFAULT_ENDPOINT "http://www.xmethods.net/interfaces/rss"

#define MAX_REDIRECTS 10

int main(int argc, char **argv)
{ struct soap *soap = soap_new();
  const char *endpoint;
  struct rss *rss;
  int i;
  /* RSS 0.91 has no namespaces */
  soap->namespaces = NULL;
  /* and no encoding style */
  soap->encodingStyle = NULL;
  /* get URL of RSS feed */
  if (argc >= 2)
    endpoint = argv[1];
  else
    endpoint = DEFAULT_ENDPOINT;
  /* connect and parse HTTP header (max HTTP redirects) */
  for (i = 0; i < MAX_REDIRECTS; i++)
  { /* HTTP GET and parse HTTP header */
    if (soap_connect_command(soap, SOAP_GET, endpoint, NULL)
     || soap_begin_recv(soap))
    { if ((soap->error >= 301 && soap->error <= 303) || soap->error == 307)
        endpoint = soap_strdup(soap, soap->endpoint); /* HTTP redirects */
      else
      { soap_print_fault(soap, stderr);
        exit(soap->error);
      }
    }
    else
      break;
  }
  /* parse RSS */
  rss = soap_get_rss(soap, NULL, "rss", NULL);
  /* close connection */
  soap_end_recv(soap);
  soap_closesock(soap);
  if (rss)
  { if (!strcmp(rss->version, "0.91") || !strcmp(rss->version, "2.0"))
    { printf("Title: %s\n", STR(rss->channel.title));
      printf("Link: %s\n", STR(rss->channel.link));
      printf("Language: %s\n", STR(rss->channel.language));
      printf("Description: %s\n", STR(rss->channel.description));
      if (rss->channel.image)
      { printf("Image title: %s\n", STR(rss->channel.image->title));
        printf("Image url: %s\n", STR(rss->channel.image->url));
        printf("Image link: %s\n", STR(rss->channel.image->link));
        printf("Image dimensions: %d x %d\n", rss->channel.image->width, rss->channel.image->height);
        printf("Image description: %s\n", STR(rss->channel.image->description));
      }
      for (i = 0; i < rss->channel.__size; i++)
      { printf("\n%3d Title: %s\n", i+1, STR(rss->channel.item[i].title));
        printf("    Link: %s\n", STR(rss->channel.item[i].link));
        printf("    Description: %s\n", STR(rss->channel.item[i].description));
      }
      printf("\nCopyright: %s\n", STR(rss->channel.copyright));
    }
    else
      fprintf(stderr, "RSS 0.91 or 2.0 content expected\n");
  }
  else
    soap_print_fault(soap, stderr);
  soap_end(soap);
  soap_done(soap);
  soap_free(soap);
  return 0;
}

/* Don't need a namespace table. We put an empty one here to avoid link errors */
struct Namespace namespaces[] = { {NULL, NULL} };

Generated by  Doxygen 1.6.0   Back to index