Module Rss
val string_of_date : ?fmt:string -> date -> string
Format a date/time record as a string according to the format
string
fmt
.
fmt The format string. It consists of zero or more
conversion specifications and ordinary characters. All ordinary
characters are kept as such in the final string. A conversion
specification consists of the '%' character and one other
character. See
Netdate.format_to
for more details.
Default: "%d %b %Y"
.
type email = string
can be, for example: foo@bar.com (Mr Foo Bar)
type pics_rating = string
type skip_hours = int list
0 .. 23
type skip_days = int list
0 is Sunday, 1 is Monday, ...
type category = {
cat_name : string; (* A forward-slash-separated string that identifies a hierarchic
location in the indicated taxonomy. *)
cat_domain : url option; (* Identifies a categorization taxonomy. *)
}
type image = {
image_url : url; (* The URL of a GIF, JPEG or PNG image that represents the channel. *)
image_title : string; (* Description of the image, it's used in the ALT attribute of
the HTML <img> tag when the channel is rendered in HTML. *)
image_link : url; (* The URL of the site, when the channel is rendered, the image
is a link to the site. (Note, in practice the
image_title
and image_link
should have the same value as the channel's
ch_title
and ch_link
.) *)image_height : int option; (* Height of the image, in pixels. *)
image_width : int option; (* Width of the image, in pixels. *)
image_desc : string option; (* Text to be included in the "title" attribute of the link formed
around the image in the HTML rendering. *)
}
type text_input = {
ti_title : string; (* The label of the Submit button in the text input area. *)
ti_desc : string; (* Explains the text input area. *)
ti_name : string; (* The name of the text object in the text input area. *)
ti_link : url; (* The URL of the CGI script that processes text input requests. *)
}
type enclosure = {
encl_url : url; (* URL of the enclosure *)
encl_length : int; (* size in bytes *)
encl_type : string; (* MIME type *)
}
type guid =
| Guid_permalink of url (* A permanent URL pointing to the story. *)
| Guid_name of string (* A string that uniquely identifies the item. *)
type source = {
src_name : string;
src_url : url;
}
type cloud = {
cloud_domain : string;
cloud_port : int;
cloud_path : string;
cloud_register_procedure : string;
cloud_protocol : string;
}
See specification
type 'a item_t = {
item_title : string option; (* Optional title *)
item_link : url option; (* Optional link *)
item_desc : string option; (* Optional description *)
item_pubdate : date option; (* Date of publication *)
item_author : email option; (* The email address of the author of the item. *)
item_categories : category list; (* Categories for the item. See the field category. *)
item_comments : url option; (* Url of comments about this item *)
item_enclosure : enclosure option;
item_guid : guid option; (* A globally unique identifier for the item. *)
item_source : source option;
item_data : 'a option; (* Additional data, since RSS can be extended with namespace-prefixed nodes. *)
}
An item may represent a "story". Its description is a synopsis of
the story (or sometimes the full story), and the link points to
the full story.
type namespace = (string * string)
A namespace is a pair (name, url).
type ('a, 'b) channel_t = {
ch_title : string; (* Mandatory. The name of the channel, for example the title of
your web site. *)
ch_link : url; (* Mandatory. The URL to the HTML website corresponding to the channel. *)
ch_desc : string; (* Mandatory. A sentence describing the channel. *)
ch_language : string option; (* Language of the news, e.g. "en". See the W3C
language codes. *)
ch_copyright : string option; (* Copyright notice. *)
ch_managing_editor : email option; (* Managing editor of the news. *)
ch_webmaster : email option; (* The address of the webmasterof the site. *)
ch_pubdate : date option; (* Publication date of the channel. *)
ch_last_build_date : date option; (* When the channel content changed for the last time. *)
ch_categories : category list; (* Categories for the channel. See the field category. *)
ch_generator : string option; (* The tool used to generate this channel. *)
ch_cloud : cloud option; (* Allows processes to register with a cloud to be notified of updates to the channel. *)
ch_docs : url option; (* An url to a RSS format reference. *)
ch_ttl : int option; (* Time to live, in minutes. It indicates how long a channel can
be cached before refreshing from the source. *)
ch_image : image option;
ch_rating : pics_rating option; (* The PICS rating for the channel. *)
ch_text_input : text_input option;
ch_skip_hours : skip_hours option; (* A hint for aggregators telling them which hours they can skip. *)
ch_skip_days : skip_days option; (* A hint for aggregators telling them which days they can skip. *)
ch_items : 'b item_t list;
ch_data : 'a option; (* Additional data, since RSS can be extended with namespace-prefixed nodes. *)
ch_namespaces : namespace list;
}
type item = unit item_t
type channel = (unit, unit) channel_t
val item : ?title:string -> ?link:url -> ?desc:string -> ?pubdate:date -> ?author:email -> ?cats:category list -> ?comments:url -> ?encl:enclosure -> ?guid:guid -> ?source:source -> ?data:'a -> unit -> 'a item_t
item()
creates a new item with all fields set to None
. Use the
optional parameters to set fields.
val channel : title:string -> link:url -> desc:string -> ?language:string -> ?copyright:string -> ?managing_editor:email -> ?webmaster:email -> ?pubdate:date -> ?last_build_date:date -> ?cats:category list -> ?generator:string -> ?cloud:cloud -> ?docs:url -> ?ttl:int -> ?image:image -> ?rating:pics_rating -> ?text_input:text_input -> ?skip_hours:skip_hours -> ?skip_days:skip_days -> ?data:'a -> ?namespaces:namespace list -> 'b item_t list -> ('a, 'b) channel_t
channel items
creates a new channel containing items
. Other
fields are set to None
unless the corresponding optional
parameter is used.
val compare_item : ?comp_data:'a -> 'a -> int -> 'a item_t -> 'a item_t -> int
val copy_item : 'a item_t -> 'a item_t
val copy_channel : ('a, 'b) channel_t -> ('a, 'b) channel_t
val keep_n_items : int -> ('a, 'b) channel_t -> ('a, 'b) channel_t
keep_n_items n ch
returns a copy of the channel, keeping only
n
items maximum.
val sort_items_by_date : 'a item_t list -> 'a item_t list
Sort items by date, older last.
val merge_channels : ('a, 'b) channel_t -> ('a, 'b) channel_t -> ('a, 'b) channel_t
merge_channels c1 c2
merges the given channels in a new channel,
sorting items using sort_items_by_date. Channel information are
copied from the first channel c1
.
exception Error of string
Use this exception to indicate an error is functions given to
make_opts
used
to read additional data from prefixed XML nodes.
type ('a, 'b) opts
Options used when reading source.
val make_opts : ?schemes:(string, Neturl.url_syntax) Hashtbl.t -> ?base_syntax:Neturl.url_syntax -> ?read_channel_data:xmltree list -> 'a option -> ?read_item_data:xmltree list -> 'b option -> unit -> ('a, 'b) opts
See Neturl documentation for
schemes
and base_syntax
options.
They are used to parse URLs.
read_channel_data provides a way to read additional information from the
subnodes of the channels. All these subnodes are prefixed by an expanded namespace.
read_item_data is the equivalent of
read_channel_data
parameter but
is called of each item with its prefixed subnodes.
val default_opts : (unit, unit) opts
val channel_t_of_file : ('a, 'b) opts -> string -> (('a, 'b) channel_t * string list)
channel_[t_]of_X
returns the parsed channel and a list of encountered errors.
Note that only namespaces declared in the root not of the XML tree are added to ch_namespaces
field.
Raises
Failure
if the channel could not be parsed.
val channel_t_of_string : ('a, 'b) opts -> string -> (('a, 'b) channel_t * string list)
val channel_t_of_channel : ('a, 'b) opts -> Pervasives.in_channel -> (('a, 'b) channel_t * string list)
val channel_t_of_xmls : ('a, 'b) opts -> xmltree list -> (('a, 'b) channel_t * string list)
Read a channel from XML trees. These trees correspond to nodes under the
"channel"
XML node
of a reguler RSS document.
val channel_of_file : string -> (channel * string list)
val channel_of_string : string -> (channel * string list)
type 'a data_printer = 'a -> xmltree list
val print_file : ?channel_data_printer:'a data_printer -> ?item_data_printer:'b data_printer -> ?indent:int -> ?date_fmt:string -> ?encoding:string -> string -> ('a, 'b) channel_t -> unit