<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: browser code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 01:57:10 GMT</pubDate>
    <description>DZone Snippets: browser code</description>
    <item>
      <title>Getting Started With WWW::Mechanize</title>
      <link>http://snippets.dzone.com/posts/show/5134</link>
      <description>This Ruby code uses WWW:mechanize to act like a web browser.  &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt; require 'rubygems'&lt;br /&gt; require 'mechanize'&lt;br /&gt;&lt;br /&gt; agent = WWW::Mechanize.new&lt;br /&gt; page = agent.get('http://google.com/')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Refer to the documentation at http://mechanize.rubyforge.org/mechanize/. Then gem install mechanize, and try running the code in an irb session.&lt;br /&gt;&lt;br /&gt;output (extract):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;=&gt; #&lt;WWW::Mechanize::Page&lt;br /&gt; {url #&lt;URI::HTTP:0xfdbbbb286 URL:http://www.google.com/&gt;}&lt;br /&gt; {meta}&lt;br /&gt; {title "Google"}&lt;br /&gt; {iframes}&lt;br /&gt; {frames}&lt;br /&gt; {links&lt;br /&gt;  #&lt;WWW::Mechanize::Page::Link&lt;br /&gt;   "Images"&lt;br /&gt;   "http://images.google.com/imghp?hl=en&amp;tab=wi"&gt;&lt;br /&gt;  #&lt;WWW::Mechanize::Page::Link&lt;br /&gt;   "Maps"&lt;br /&gt;   "http://maps.google.com/maps?hl=en&amp;tab=wl"&gt;&lt;br /&gt;  #&lt;WWW::Mechanize::Page::Link&lt;br /&gt;   "News"&lt;br /&gt;   "http://news.google.com/nwshp?hl=en&amp;tab=wn"&gt;&lt;br /&gt;  #&lt;WWW::Mechanize::Page::Link&lt;br /&gt;   "Shopping"&lt;br /&gt;   "http://www.google.com/prdhp?hl=en&amp;tab=wf"&gt;&lt;br /&gt;  #&lt;WWW::Mechanize::Page::Link&lt;br /&gt;   "Gmail"&lt;br /&gt;   "http://mail.google.com/mail/?hl=en&amp;tab=wm"&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 12 Feb 2008 17:53:54 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5134</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>How to detect a browser iPhone ?</title>
      <link>http://snippets.dzone.com/posts/show/4826</link>
      <description>The browser is :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;Mozilla/5.0 (iPhone; U; CPU like Mac OS X; fr) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3B48b Safari/419.3&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ab-d.fr/"&gt;Source: ab-d.fr&lt;br /&gt;Internet with iPhone&lt;br /&gt;&lt;/a&gt;</description>
      <pubDate>Thu, 29 Nov 2007 10:34:42 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4826</guid>
      <author>ki4ngel (Benoit Asselin)</author>
    </item>
    <item>
      <title>Browser automation using perl LWP</title>
      <link>http://snippets.dzone.com/posts/show/4587</link>
      <description>// This is a sample code used to measure reports response times on a OAS application.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;#&lt;br /&gt;# LWP connection to the Datamart Portal&lt;br /&gt;# Timing of the main reports&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;require LWP::UserAgent;&lt;br /&gt;&lt;br /&gt;my $ua = LWP::UserAgent-&gt;new;&lt;br /&gt;&lt;br /&gt;sub isodate() {&lt;br /&gt;        my ($day, $mon, $year, $hour, $min, $sec) = (localtime)[3, 4, 5, 2, 1, 0];&lt;br /&gt;        $mon++; # 0-based index&lt;br /&gt;        $year = $year + 1900;&lt;br /&gt;        my $date = sprintf ("%04i-%02i-%02i %02i\:%02i\:%02i", $year, $mon, $day, $hour, $min, $sec);&lt;br /&gt;        return $date;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub datamart_login {&lt;br /&gt;        my ( $user, $pass ) = @_;&lt;br /&gt;        my $time_begin=time();&lt;br /&gt;        my $url='http://daprd:7782/portal/page?_pageid=37,134413,37_134422&amp;_dad=portal&amp;_schema=PORTAL';&lt;br /&gt;        my $req = HTTP::Request-&gt;new( GET =&gt; $url );&lt;br /&gt;        my $resp = $ua-&gt;request($req);&lt;br /&gt;        my $loginform = $resp-&gt;content ;&lt;br /&gt;        if ( $loginform !~ /Entrez votre nom utilisateur/ ) {&lt;br /&gt;                die isodate()." Failed to get the logon page of the Web Site\n";&lt;br /&gt;        } else {&lt;br /&gt;                my $locale="";&lt;br /&gt;                my ($v) = $loginform =~ /NAME=\"v\" value=\"(.+)\"/;&lt;br /&gt;                my ($site2pstoretoken) = $loginform =~ /NAME=\"site2pstoretoken\" value=\"(.+)\"/;&lt;br /&gt;                my ($submiturl) = $loginform =~ /form method=\"POST\" action=\"(.*?)\"/;&lt;br /&gt;                $resp = $ua-&gt;post( $submiturl,&lt;br /&gt;                   [&lt;br /&gt;                     ssousername =&gt; $user,&lt;br /&gt;                     password =&gt; $pass,&lt;br /&gt;                     v =&gt; $v,&lt;br /&gt;                     locale =&gt; $locale,&lt;br /&gt;                     site2pstoretoken =&gt; $site2pstoretoken&lt;br /&gt;                   ],&lt;br /&gt;                );&lt;br /&gt;                $resp = $ua-&gt;get($url);&lt;br /&gt;                $resp = $ua-&gt;get($url);&lt;br /&gt;                if ( $resp-&gt;content !~ /Crit..res de recherche/ ) {&lt;br /&gt;                        die isodate()." Failed to get the main page of Portal\n";&lt;br /&gt;                }&lt;br /&gt;        }&lt;br /&gt;        print join(";",isodate(),"Time to log on the Portal",time()-$time_begin,$url)."\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub datamart_testurl {&lt;br /&gt;        my ($label,$url,$expected)=@_;&lt;br /&gt;        my $time_begin=time();&lt;br /&gt;        my $resp;&lt;br /&gt;        $resp = $ua-&gt;get($url);&lt;br /&gt;        $resp = $ua-&gt;get($url) if $resp-&gt;content !~ /$expected/;        # We try two times !&lt;br /&gt;        if ( $resp-&gt;content !~ /$expected/ ) {&lt;br /&gt;                print STDERR isodate()." Test Failed on $label. $expected not found in response.\n";&lt;br /&gt;                print STDERR $resp-&gt;as_string;&lt;br /&gt;        } else {&lt;br /&gt;                print join(";",isodate(),$label,time()-$time_begin,$url)."\n";&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$ua-&gt;timeout(1200);&lt;br /&gt;$ua-&gt;cookie_jar({});&lt;br /&gt;$ua-&gt;agent( 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)' );&lt;br /&gt;#push @{ $ua-&gt;requests_redirectable }, 'POST';&lt;br /&gt;&lt;br /&gt;# &gt;&gt;&gt;&gt; Main code here&lt;br /&gt;&lt;br /&gt;datamart_login("xxxx","xxxx");&lt;br /&gt;&lt;br /&gt;open FH,"/exploit/scripts/appli/check_datamart.ini" or die "Unable to open check_datamart.ini";&lt;br /&gt;while (&lt;FH&gt;) {&lt;br /&gt;        chomp();&lt;br /&gt;        my ($report,$expected,$url) = split /;/;&lt;br /&gt;        datamart_testurl($report,$url,$expected);&lt;br /&gt;}&lt;br /&gt;close FH;&lt;br /&gt;&lt;br /&gt;# &lt;&lt;&lt;&lt; Main code here&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 28 Sep 2007 11:48:47 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4587</guid>
      <author>bouffon69 (Sylvain Le Courtois)</author>
    </item>
    <item>
      <title>Conditional comment</title>
      <link>http://snippets.dzone.com/posts/show/3268</link>
      <description>From the microsoft website. Better than browser sniffing, the content within the tags will be shown if the condition within [] is met, in the this case IE, but you could also use IE 7 for example&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &lt;!--[if IE]&gt;&lt;br /&gt;    Content&lt;br /&gt;  &lt;![endif]--&gt;&lt;br /&gt;&lt;br /&gt;  &lt;!--[if lt IE6]&gt; //lower than IE6&lt;br /&gt;    Content&lt;br /&gt;  &lt;![endif]--&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and the XSL version&lt;br /&gt;&lt;br /&gt;  &lt;xsl:comment&gt;[if IE 7]&amp;gt;&lt;br /&gt;    Content &amp;lt;![endif]&lt;/xsl:comment&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 10 Jan 2007 22:14:46 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3268</guid>
      <author>Booma (Alan Coleman)</author>
    </item>
    <item>
      <title>yubnub.py</title>
      <link>http://snippets.dzone.com/posts/show/3120</link>
      <description>&lt;code&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;__author__="Andrew Pennebaker (andrew.pennebaker@gmail.com)"&lt;br /&gt;__date__="9 Dec 2006 - 10 Dec 2006"&lt;br /&gt;__copyright__="Copyright 2006 Andrew Pennebaker"&lt;br /&gt;__license__="GPL"&lt;br /&gt;__version__="0.0.1"&lt;br /&gt;__credits__="Based on Yubnub for Windows (http://www.opbarnes.com/blog/Programming/OPB/Utilities/yubnub.html)"&lt;br /&gt;__URL__="http://snippets.dzone.com/posts/show/3120"&lt;br /&gt;&lt;br /&gt;from html2txt import html2txt&lt;br /&gt;&lt;br /&gt;import webbrowser&lt;br /&gt;from urllib import urlopen&lt;br /&gt;import re&lt;br /&gt;&lt;br /&gt;import sys&lt;br /&gt;from getopt import getopt&lt;br /&gt;&lt;br /&gt;PARSER="http://yubnub.org/parser/parse?command="&lt;br /&gt;&lt;br /&gt;BROWSER_MODE="BROWSER"&lt;br /&gt;PLAIN_MODE="PLAIN"&lt;br /&gt;&lt;br /&gt;def space2plus(s):&lt;br /&gt;	return "+".join(s.split())&lt;br /&gt;&lt;br /&gt;def yubnub(command=""):&lt;br /&gt;	global PARSER&lt;br /&gt;&lt;br /&gt;	return PARSER+space2plus(command)&lt;br /&gt;&lt;br /&gt;def yubnubBrowser(command):&lt;br /&gt;	return webbrowser.open(yubnub(command))&lt;br /&gt;&lt;br /&gt;def cleanHTML(html):&lt;br /&gt;	h=html2txt()&lt;br /&gt;	h.feed(html)&lt;br /&gt;	h.close()&lt;br /&gt;&lt;br /&gt;	return h.output()&lt;br /&gt;&lt;br /&gt;def yubnubPlain(command, clean=True):&lt;br /&gt;	command=yubnub(command)&lt;br /&gt;&lt;br /&gt;	try:&lt;br /&gt;		url=urlopen(command)&lt;br /&gt;		lines=url.readlines()&lt;br /&gt;		url.close()&lt;br /&gt;&lt;br /&gt;		lines="".join(lines)&lt;br /&gt;&lt;br /&gt;		if clean:&lt;br /&gt;			return cleanHTML(lines)&lt;br /&gt;&lt;br /&gt;		return lines&lt;br /&gt;&lt;br /&gt;	except IOError, e:&lt;br /&gt;		return "Error connecting to "+command&lt;br /&gt;&lt;br /&gt;def usage():&lt;br /&gt;	print "Usage: "+sys.argv[0]+" [options] &lt;command&gt;"&lt;br /&gt;	print "-b --browser"&lt;br /&gt;	print "\n--plain (default)"&lt;br /&gt;	print "\t-c --clean (default)"&lt;br /&gt;	print "\t-d --dirty"&lt;br /&gt;	print "\n--parser &lt;parser&gt; (experimental)"&lt;br /&gt;	print "\n-h --help"&lt;br /&gt;&lt;br /&gt;	sys.exit()&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;	global PARSER&lt;br /&gt;&lt;br /&gt;	global BROWSER_MODE&lt;br /&gt;	global PLAIN_MODE&lt;br /&gt;&lt;br /&gt;	mode=PLAIN_MODE&lt;br /&gt;	parser=PARSER&lt;br /&gt;	clean=True&lt;br /&gt;&lt;br /&gt;	systemArgs=sys.argv[1:]&lt;br /&gt;	optlist, args=[], []&lt;br /&gt;	try:&lt;br /&gt;		optlist, args=getopt(systemArgs, "bhcd", ["browser", "plain", "clean", "dirty", "parser=", "help"])&lt;br /&gt;	except:&lt;br /&gt;		usage()&lt;br /&gt;&lt;br /&gt;	for option, value in optlist:&lt;br /&gt;		if option=="-h" or option=="--help":&lt;br /&gt;			usage()&lt;br /&gt;&lt;br /&gt;		elif option=="-b" or option=="--browser":&lt;br /&gt;			mode=BROWSER_MODE&lt;br /&gt;		elif option=="--plain":&lt;br /&gt;			mode=PLAIN_MODE&lt;br /&gt;		elif option=="-c" or option=="--clean":&lt;br /&gt;			clean=True&lt;br /&gt;		elif option=="-d" or option=="--dirty":&lt;br /&gt;			clean=False&lt;br /&gt;		elif option=="--parser":&lt;br /&gt;			parser=value&lt;br /&gt;&lt;br /&gt;	command=" ".join(args)&lt;br /&gt;&lt;br /&gt;	if mode==BROWSER_MODE:&lt;br /&gt;		yubnubBrowser(command)&lt;br /&gt;	elif mode==PLAIN_MODE:&lt;br /&gt;		for line in yubnubPlain(command, clean):&lt;br /&gt;			sys.stdout.write(line)&lt;br /&gt;		print ""&lt;br /&gt;&lt;br /&gt;if __name__=="__main__":&lt;br /&gt;	main()&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 10 Dec 2006 08:16:14 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3120</guid>
      <author>mcandre (Andrew Pennebaker)</author>
    </item>
    <item>
      <title>Nokia - User Agent</title>
      <link>http://snippets.dzone.com/posts/show/3102</link>
      <description>// User Agent&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Modello 3230&lt;br /&gt;"Nokia3230/2.0 (5.0614.0) SymbianOS/7.0s Series60/2.1 Profile/MIDP-2.0&lt;br /&gt;Configuration/CLDC-1.0"&lt;br /&gt;&lt;br /&gt;Modello 6260&lt;br /&gt;"Nokia6260/2.0 (3.0448.0) SymbianOS/7.0s Series60/2.1 Profile/MIDP-2.0&lt;br /&gt;Configuration/CLDC-1.0"&lt;br /&gt;&lt;br /&gt;Modello 6600&lt;br /&gt;"Nokia6600/1.0 (5.27.0) SymbianOS/7.0s Series60/2.0 Profile/MIDP-2.0&lt;br /&gt;Configuration/CLDC-1.0"&lt;br /&gt;&lt;br /&gt;Modello 6620&lt;br /&gt;"Nokia6620/2.0 (4.22.1) SymbianOS/7.0s Series60/2.1 Profile/MIDP-2.0&lt;br /&gt;Configuration/CLDC-1.0"&lt;br /&gt;&lt;br /&gt;Modello 6630&lt;br /&gt;"Nokia6630/1.0 (5.03.08) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0&lt;br /&gt;Configuration/CLDC-1.1"&lt;br /&gt;&lt;br /&gt;Modello 6670&lt;br /&gt;"Nokia6670/2.0 (6.0540.0) SymbianOS/7.0s Series60/2.1 Profile/MIDP-2.0&lt;br /&gt;Configuration/CLDC-1.0"&lt;br /&gt;&lt;br /&gt;Modello 6680&lt;br /&gt;"Nokia6680/1.0 (4.04.07) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0&lt;br /&gt;Configuration/CLDC-1.1"&lt;br /&gt;&lt;br /&gt;Modello 6681&lt;br /&gt;"Nokia6681/2.0 (5.37.01) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0&lt;br /&gt;Configuration/CLDC-1.1"&lt;br /&gt;&lt;br /&gt;Modello 9300&lt;br /&gt;"Mozilla/4.0 (compatible; MSIE 5.0; Series80/2.0 Nokia9300/05.22&lt;br /&gt;Profile/MIDP-2.0 Configuration/CLDC-1.1)"&lt;br /&gt;&lt;br /&gt;Modello 9500&lt;br /&gt;"Mozilla/4.0 (compatible; MSIE 5.0; Series80/2.0 Nokia9500/4.51&lt;br /&gt;Profile/MIDP-2.0 Configuration/CLDC-1.1)"&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 07 Dec 2006 05:10:21 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3102</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>cross-browser way to get selection.</title>
      <link>http://snippets.dzone.com/posts/show/2914</link>
      <description>&lt;code&gt;&lt;br /&gt;function getSel(){&lt;br /&gt;var w=window,d=document,gS='getSelection';&lt;br /&gt;return (''+(w[gS]?w[gS]():d[gS]?d[gS]():d.selection.createRange().text)).replace(/(^\s+|\s+$)/g,'');&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 27 Oct 2006 21:20:29 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2914</guid>
      <author>em3zh3 (Doc Aha)</author>
    </item>
    <item>
      <title>Cool Effects in Browser</title>
      <link>http://snippets.dzone.com/posts/show/2821</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 15 Oct 2006 07:12:49 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2821</guid>
      <author>mornlee (mornlee)</author>
    </item>
    <item>
      <title>Javascript Browser Check</title>
      <link>http://snippets.dzone.com/posts/show/2756</link>
      <description>// the navigator object stores the browser and additional secifications&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;JS Browser Check&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;document.write("Your browser is " + navigator.appName);&lt;br /&gt;&lt;br /&gt;if (navigator.appVersion.substring(0, 1) == "4")&lt;br /&gt;  document.write("4th generation browser!");&lt;br /&gt;  &lt;br /&gt;document.write("patform/os:" + navigator.platform);&lt;br /&gt;document.write("user agent data:" + navigator.userAgent);&lt;br /&gt;&lt;br /&gt;if (navigator.cookieEnabled == true) {&lt;br /&gt;  document.write("cookies enabled");&lt;br /&gt;} else if (navigator.cookieEnabled == false) {&lt;br /&gt;  document.write("no cookies.");&lt;br /&gt;} else {&lt;br /&gt;  document.write("cookies? No Info available.");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (navigator.javaEnabled()) {&lt;br /&gt;  document.write("java enabled.");&lt;br /&gt;} else {&lt;br /&gt;  document.write("java not available.");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (navigator.language.indexOf("en") &gt; -1) {&lt;br /&gt;  document.write("language ins english");&lt;br /&gt;}else if (navigator.language.indexOf("de") &gt; -1) {&lt;br /&gt;  document.write("language is german");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;/body&gt;&lt;/html&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 02 Oct 2006 15:52:48 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2756</guid>
      <author>ovhaag (Oliver Haag)</author>
    </item>
    <item>
      <title>reformat unsigned lists (bullet lists)</title>
      <link>http://snippets.dzone.com/posts/show/2713</link>
      <description>// unsigned list look the same in firefox and internet explore&lt;br /&gt;// but firefox uses padding and ie uses margin to indent&lt;br /&gt;// so if you want to eliminate the indent you mat set both&lt;br /&gt;&lt;br /&gt;// here the top margin is negative too&lt;br /&gt;// so the bullet list is written directly under the text&lt;br /&gt;// and the bottom-margin of the p-tag can remain (needet elsewhere)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ul {&lt;br /&gt;	padding-left: 15px;&lt;br /&gt;	margin-left: 0px;&lt;br /&gt;	margin-top: -10px;&lt;br /&gt;	margin-bottom: 10px;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 25 Sep 2006 23:26:16 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2713</guid>
      <author>ovhaag (Oliver Haag)</author>
    </item>
  </channel>
</rss>
