<?xml version="1.0" encoding="UTF-8"?>
<snippet>
  <account-id type="integer">2</account-id>
  <body>h2. Install GeoIP library

&lt;code&gt;
wget http://www.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
tar -zxvf GeoIP.tar.gz
cd GeoIP
./configure --prefix=/opt/GeoIP
make &amp;&amp; sudo make install
&lt;/code&gt;

h2. Install the geoip-city gem

&lt;code&gt;
gem install geoip_city -- --with-geoip-dir=/opt/GeoIP
&lt;/code&gt;

h2. Test the bindings

&lt;code&gt;
curl -O http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
&lt;/code&gt;

Fire up IRB and try the following code:

&lt;code&gt;
require 'rubygems'
require 'geoip_city'
db = GeoIPCity::Database.new('GeoLiteCity.dat')
result = db.look_up('192.143.34.23')
p result
&lt;/code&gt;

Another option is to use hostip.info's database, as described in &quot;this article&quot;:http://blog.hungrymachine.com/2007/10/22/super-fast-ip-to-lat-lng-in-rails.

h2. Create a wrapper

&lt;code&gt;
require 'rubygems'
require 'geoip_city'
require 'ostruct'

class Location &lt; OpenStruct
end

class GeoIP
  class &lt;&lt; self
    DB = GeoIPCity::Database.new('GeoLiteCity.dat')

    def lookup(ip)
      if result = DB.look_up(ip)
        location = Location.new

        #
        # {:country_code=&gt;&quot;FR&quot;, :country_code3=&gt;&quot;FRA&quot;, :country_name=&gt;&quot;France&quot;, :latitude=&gt;46.0, :longitude=&gt;2.0}
        #
        result.each do |key, val| 
          location.send &quot;#{key}=&quot;, val
        end
      end

      location
    end
  end
end
&lt;/code&gt;

h2. Add some Rails caching

Combined with the above code this will give you cached IP lookups: 

&lt;code&gt;
class GeoIP

  class &lt;&lt; self
    def lookup_with_caching(ip)
      Rails.cache.fetch(ip, :expires_in =&gt; 1.month) do 
        lookup_without_caching(ip)
      end
    end

    alias_method_chain :lookup, :caching
  end
end
&lt;/code&gt;

h2. Alternatives

If you're unable to install the C extension you might want to have a look at the geoip gem, which is a pure Ruby library that can read the MaxMind's geoip database. It's slower but easier to install: &quot;http://geoip.rubyforge.org/&quot;:http://geoip.rubyforge.org/</body>
  <comments-count type="integer">0</comments-count>
  <created-at type="datetime">2008-04-18T00:21:04+03:00</created-at>
  <id type="integer">179</id>
  <language-id type="integer">124</language-id>
  <rendered-body>&lt;h2&gt;Install GeoIP library&lt;/h2&gt;
&lt;p&gt;&lt;pre class=&quot;active4d&quot;&gt;&lt;span class=&quot;line-numbers&quot;&gt;   1 &lt;/span&gt; wget http&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;www.&lt;span class=&quot;FunctionName&quot;&gt;maxmind&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;download&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;geoip&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;api&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;c&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;LibraryClassType&quot;&gt;GeoIP&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;tar&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;gz&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   2 &lt;/span&gt; tar &lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;zxvf &lt;span class=&quot;LibraryClassType&quot;&gt;GeoIP&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;tar&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;gz&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   3 &lt;/span&gt; cd &lt;span class=&quot;Variable&quot;&gt;GeoIP&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   4 &lt;/span&gt; .&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;configure &lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;prefix&lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Variable&quot;&gt;GeoIP&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   5 &lt;/span&gt; make &lt;span class=&quot;Operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install
&lt;/pre&gt;&lt;/p&gt;
&lt;h2&gt;Install the geoip-city gem&lt;/h2&gt;
&lt;p&gt;&lt;pre class=&quot;active4d&quot;&gt;&lt;span class=&quot;line-numbers&quot;&gt;   1 &lt;/span&gt; gem install geoip_city &lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;with&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;geoip&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;dir&lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Variable&quot;&gt;GeoIP&lt;/span&gt;
&lt;/pre&gt;&lt;/p&gt;
&lt;h2&gt;Test the bindings&lt;/h2&gt;
&lt;p&gt;&lt;pre class=&quot;active4d&quot;&gt;&lt;span class=&quot;line-numbers&quot;&gt;   1 &lt;/span&gt; curl &lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Variable&quot;&gt;O&lt;/span&gt; http&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;geolite.&lt;span class=&quot;FunctionName&quot;&gt;maxmind&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;download&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;geoip&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;database&lt;span class=&quot;Operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;LibraryClassType&quot;&gt;GeoLiteCity&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;dat&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;gz&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   2 &lt;/span&gt; gunzip &lt;span class=&quot;LibraryClassType&quot;&gt;GeoLiteCity&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;dat&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;gz&lt;/span&gt;
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Fire up &lt;span class=&quot;caps&quot;&gt;IRB&lt;/span&gt; and try the following code:&lt;/p&gt;
&lt;p&gt;&lt;pre class=&quot;active4d&quot;&gt;&lt;span class=&quot;line-numbers&quot;&gt;   1 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;rubygems&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   2 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;geoip_city&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   3 &lt;/span&gt; db &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;LibraryClassType&quot;&gt;GeoIPCity&lt;/span&gt;::&lt;span class=&quot;FunctionName&quot;&gt;Database&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;new&lt;/span&gt;(&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;GeoLiteCity.dat&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;line-numbers&quot;&gt;   4 &lt;/span&gt; result &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; db.&lt;span class=&quot;FunctionName&quot;&gt;look_up&lt;/span&gt;(&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;192.143.34.23&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;line-numbers&quot;&gt;   5 &lt;/span&gt; p result
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Another option is to use hostip.info&amp;#8217;s database, as described in &lt;a href=&quot;http://blog.hungrymachine.com/2007/10/22/super-fast-ip-to-lat-lng-in-rails&quot;&gt;this article&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Create a wrapper&lt;/h2&gt;
&lt;p&gt;&lt;pre class=&quot;active4d&quot;&gt;&lt;span class=&quot;line-numbers&quot;&gt;   1 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;rubygems&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   2 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;geoip_city&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   3 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;ostruct&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   4 &lt;/span&gt; 
&lt;span class=&quot;line-numbers&quot;&gt;   5 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;TypeName&quot;&gt;Location&lt;span class=&quot;InheritedClass&quot;&gt; &lt;span class=&quot;InheritedClass&quot;&gt;&amp;lt;&lt;/span&gt; OpenStruct&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   6 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   7 &lt;/span&gt; 
&lt;span class=&quot;line-numbers&quot;&gt;   8 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;TypeName&quot;&gt;GeoIP&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   9 &lt;/span&gt;   &lt;span class=&quot;Keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;TypeName&quot;&gt;&lt;span class=&quot;Variable&quot;&gt;&lt;span class=&quot;Variable&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; self&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  10 &lt;/span&gt;     &lt;span class=&quot;Variable&quot;&gt;DB&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;LibraryClassType&quot;&gt;GeoIPCity&lt;/span&gt;::&lt;span class=&quot;FunctionName&quot;&gt;Database&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;new&lt;/span&gt;(&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;GeoLiteCity.dat&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;line-numbers&quot;&gt;  11 &lt;/span&gt; 
&lt;span class=&quot;line-numbers&quot;&gt;  12 &lt;/span&gt;     &lt;span class=&quot;Keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;FunctionName&quot;&gt;lookup&lt;/span&gt;(&lt;span class=&quot;FunctionArgument&quot;&gt;ip&lt;/span&gt;)
&lt;span class=&quot;line-numbers&quot;&gt;  13 &lt;/span&gt;       &lt;span class=&quot;Keyword&quot;&gt;if&lt;/span&gt; result &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Variable&quot;&gt;DB&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;look_up&lt;/span&gt;(ip)
&lt;span class=&quot;line-numbers&quot;&gt;  14 &lt;/span&gt;         location &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;LibraryClassType&quot;&gt;Location&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;new&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  15 &lt;/span&gt; 
&lt;span class=&quot;line-numbers&quot;&gt;  16 &lt;/span&gt; &lt;span class=&quot;LineComment&quot;&gt;        &lt;span class=&quot;LineComment&quot;&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  17 &lt;/span&gt; &lt;span class=&quot;LineComment&quot;&gt;        &lt;span class=&quot;LineComment&quot;&gt;#&lt;/span&gt; {:country_code=&amp;gt;&amp;quot;FR&amp;quot;, :country_code3=&amp;gt;&amp;quot;FRA&amp;quot;, :country_name=&amp;gt;&amp;quot;France&amp;quot;, :latitude=&amp;gt;46.0, :longitude=&amp;gt;2.0}&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  18 &lt;/span&gt; &lt;span class=&quot;LineComment&quot;&gt;        &lt;span class=&quot;LineComment&quot;&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  19 &lt;/span&gt;         result.&lt;span class=&quot;FunctionName&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;do &lt;/span&gt;|&lt;span class=&quot;Variable&quot;&gt;key&lt;/span&gt;, &lt;span class=&quot;Variable&quot;&gt;val&lt;/span&gt;| 
&lt;span class=&quot;line-numbers&quot;&gt;  20 &lt;/span&gt;           location.&lt;span class=&quot;FunctionName&quot;&gt;send&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;#{&lt;/span&gt;key&lt;span class=&quot;String&quot;&gt;}&lt;/span&gt;&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, val
&lt;span class=&quot;line-numbers&quot;&gt;  21 &lt;/span&gt;         &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  22 &lt;/span&gt;       &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  23 &lt;/span&gt; 
&lt;span class=&quot;line-numbers&quot;&gt;  24 &lt;/span&gt;       location
&lt;span class=&quot;line-numbers&quot;&gt;  25 &lt;/span&gt;     &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  26 &lt;/span&gt;   &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  27 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/p&gt;
&lt;h2&gt;Add some Rails caching&lt;/h2&gt;
&lt;p&gt;Combined with the above code this will give you cached IP lookups:&lt;/p&gt;
&lt;p&gt;&lt;pre class=&quot;active4d&quot;&gt;&lt;span class=&quot;line-numbers&quot;&gt;   1 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;TypeName&quot;&gt;GeoIP&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   2 &lt;/span&gt; 
&lt;span class=&quot;line-numbers&quot;&gt;   3 &lt;/span&gt;   &lt;span class=&quot;Keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;TypeName&quot;&gt;&lt;span class=&quot;Variable&quot;&gt;&lt;span class=&quot;Variable&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; self&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   4 &lt;/span&gt;     &lt;span class=&quot;Keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;FunctionName&quot;&gt;lookup_with_caching&lt;/span&gt;(&lt;span class=&quot;FunctionArgument&quot;&gt;ip&lt;/span&gt;)
&lt;span class=&quot;line-numbers&quot;&gt;   5 &lt;/span&gt;       &lt;span class=&quot;LibraryClassType&quot;&gt;Rails&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;cache&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;fetch&lt;/span&gt;(ip, &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;expires_in&lt;/span&gt; =&amp;gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;month&lt;/span&gt;) &lt;span class=&quot;Keyword&quot;&gt;do &lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   6 &lt;/span&gt;         &lt;span class=&quot;FunctionName&quot;&gt;lookup_without_caching&lt;/span&gt;(ip)
&lt;span class=&quot;line-numbers&quot;&gt;   7 &lt;/span&gt;       &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   8 &lt;/span&gt;     &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;   9 &lt;/span&gt; 
&lt;span class=&quot;line-numbers&quot;&gt;  10 &lt;/span&gt;     alias_method_chain &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;lookup&lt;/span&gt;, &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;caching&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  11 &lt;/span&gt;   &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  12 &lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/p&gt;
&lt;h2&gt;Alternatives&lt;/h2&gt;
&lt;p&gt;If you&amp;#8217;re unable to install the C extension you might want to have a look at the geoip gem, which is a pure Ruby library that can read the MaxMind&amp;#8217;s geoip database. It&amp;#8217;s slower but easier to install: &lt;a href=&quot;http://geoip.rubyforge.org/&quot;&gt;http://geoip.rubyforge.org/&lt;/a&gt;&lt;/p&gt;</rendered-body>
  <title>Geolocation with MaxMind's GeoIP and the geoip-city RubyGem</title>
  <updated-at type="datetime">2009-11-29T13:29:03+02:00</updated-at>
</snippet>
