GData 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +11 -0
 - data/Manifest.txt +13 -0
 - data/README.txt +65 -0
 - data/Rakefile +20 -0
 - data/bin/addenclosure +24 -0
 - data/bin/bloggerfeed +18 -0
 - data/bin/gspreadsheet +18 -0
 - data/bin/removeenclosure +18 -0
 - data/lib/gdata.rb +3 -0
 - data/lib/gdata/base.rb +75 -0
 - data/lib/gdata/blogger.rb +51 -0
 - data/lib/gdata/spreadsheet.rb +39 -0
 - data/test/test_gdata.rb +0 -0
 - metadata +69 -0
 
    
        data/History.txt
    ADDED
    
    
    
        data/Manifest.txt
    ADDED
    
    
    
        data/README.txt
    ADDED
    
    | 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            GDataRuby
         
     | 
| 
      
 2 
     | 
    
         
            +
                by Dion Almaer
         
     | 
| 
      
 3 
     | 
    
         
            +
                http://gdata-ruby.rubyforge.net
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            == DESCRIPTION:
         
     | 
| 
      
 6 
     | 
    
         
            +
              
         
     | 
| 
      
 7 
     | 
    
         
            +
            Google GData APIs allow developers to build applications on top of the Google open APIs. This project aims to help with wrappers on top of GData, and higher level libraries on top of each API itself (e.g. Calendar, Spreadsheet, Blogger, etc).
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            == FEATURES/PROBLEMS:
         
     | 
| 
      
 10 
     | 
    
         
            +
              
         
     | 
| 
      
 11 
     | 
    
         
            +
            To start out the API set isn't covered. The aim is to support the GData API itself, and then higher level classes for the various Google APIs.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            Current support:
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            * Google Account Authentication: Handle Google ClientLogin API
         
     | 
| 
      
 16 
     | 
    
         
            +
            * Google Spreadsheet Data API
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            Future support:
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            * Google Calendar API
         
     | 
| 
      
 21 
     | 
    
         
            +
            * Google AdSense API
         
     | 
| 
      
 22 
     | 
    
         
            +
            * Google AdWords API
         
     | 
| 
      
 23 
     | 
    
         
            +
            * Google Base Data API
         
     | 
| 
      
 24 
     | 
    
         
            +
            * Blogger Data API
         
     | 
| 
      
 25 
     | 
    
         
            +
            * Google Code Search API
         
     | 
| 
      
 26 
     | 
    
         
            +
            * Google Data APIs
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            == SYNOPSIS:
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              require_gem 'gdata-ruby'
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              % gspreadsheet 'sin(0.2)'
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            == REQUIREMENTS:
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            * gem
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            == INSTALL:
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            * sudo gem install
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            == LICENSE:
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            (The MIT License)
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            Copyright (c) 2007 FIX
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 49 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 50 
     | 
    
         
            +
            'Software'), to deal in the Software without restriction, including
         
     | 
| 
      
 51 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 52 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 53 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 54 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 57 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 60 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 61 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
         
     | 
| 
      
 62 
     | 
    
         
            +
            IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
         
     | 
| 
      
 63 
     | 
    
         
            +
            CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
         
     | 
| 
      
 64 
     | 
    
         
            +
            TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
         
     | 
| 
      
 65 
     | 
    
         
            +
            SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- ruby -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'hoe'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require './lib/gdata.rb'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Hoe.new('GData', GData::VERSION) do |p|
         
     | 
| 
      
 8 
     | 
    
         
            +
              p.rubyforge_name = 'gdata-ruby'
         
     | 
| 
      
 9 
     | 
    
         
            +
              p.summary = 'Google GData Ruby API'
         
     | 
| 
      
 10 
     | 
    
         
            +
              p.author = 'Dion Almaer'
         
     | 
| 
      
 11 
     | 
    
         
            +
              p.email = 'dion@almaer.com'
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
         
     | 
| 
      
 14 
     | 
    
         
            +
              p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
         
     | 
| 
      
 15 
     | 
    
         
            +
              p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              #p.executables = %w(addenclosure bloggerfeed gspreadsheet removeenclosure)
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            # vim: syntax=Ruby
         
     | 
    
        data/bin/addenclosure
    ADDED
    
    | 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby -I../lib
         
     | 
| 
      
 2 
     | 
    
         
            +
            # --------------------------------------------------------------------------
         
     | 
| 
      
 3 
     | 
    
         
            +
            # addenclosure - adds a podcast friendly enclosure to a given blog post
         
     | 
| 
      
 4 
     | 
    
         
            +
            # --------------------------------------------------------------------------
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'gdata/blogger'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            unless ENV['GDATA_USER'] and ENV['GDATA_PASS']
         
     | 
| 
      
 9 
     | 
    
         
            +
              puts "$0 requires GDATA_USER and GDATA_PASS to be set"
         
     | 
| 
      
 10 
     | 
    
         
            +
              exit
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            unless ARGV.length > 3
         
     | 
| 
      
 14 
     | 
    
         
            +
              puts "Usage: addenclosure blogid entryid enclosureurl enclosurelength"
         
     | 
| 
      
 15 
     | 
    
         
            +
              puts "Example: addenclosure 4808741160899251111 5004114743910076111 http://foo.com/mypodcast.mp3 21015178"
         
     | 
| 
      
 16 
     | 
    
         
            +
              exit
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            blog_id, entry_id, enclosure_url, enclosure_length = ARGV
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            blogger = GData::Blogger.new(blog_id, entry_id)
         
     | 
| 
      
 22 
     | 
    
         
            +
            blogger.authenticate(ENV['GDATA_USER'], ENV['GDATA_PASS'])
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            blogger.add_enclosure(enclosure_url, enclosure_length)
         
     | 
    
        data/bin/bloggerfeed
    ADDED
    
    | 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby -I../lib
         
     | 
| 
      
 2 
     | 
    
         
            +
            # --------------------------------------------------------------------------
         
     | 
| 
      
 3 
     | 
    
         
            +
            # bloggerfeed - given a blog id, show the feed
         
     | 
| 
      
 4 
     | 
    
         
            +
            # --------------------------------------------------------------------------
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'gdata/blogger'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            unless ENV['GDATA_USER'] and ENV['GDATA_PASS']
         
     | 
| 
      
 9 
     | 
    
         
            +
              puts "$0 requires GDATA_USER and GDATA_PASS to be set"
         
     | 
| 
      
 10 
     | 
    
         
            +
              exit
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            blog_id = ARGV.first or raise "#{$0}: need a blog id and an entry id (% addenclosure blogid entryid)"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            blogger = GData::Blogger.new(blog_id)
         
     | 
| 
      
 16 
     | 
    
         
            +
            blogger.authenticate(ENV['GDATA_USER'], ENV['GDATA_PASS'])
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            puts blogger.feed
         
     | 
    
        data/bin/gspreadsheet
    ADDED
    
    | 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby -I../lib
         
     | 
| 
      
 2 
     | 
    
         
            +
            # --------------------------------------------------------------------------
         
     | 
| 
      
 3 
     | 
    
         
            +
            # gspreadsheet - given a formula, run it in google spreadsheets and show the result
         
     | 
| 
      
 4 
     | 
    
         
            +
            # --------------------------------------------------------------------------
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'gdata/spreadsheet'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            unless ENV['GDATA_USER'] and ENV['GDATA_PASS']
         
     | 
| 
      
 9 
     | 
    
         
            +
              puts "$0 requires GDATA_USER and GDATA_PASS to be set"
         
     | 
| 
      
 10 
     | 
    
         
            +
              exit
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            formula = ARGV.first or 'sin(0.2)'
         
     | 
| 
      
 14 
     | 
    
         
            +
              
         
     | 
| 
      
 15 
     | 
    
         
            +
            gs = GData::Spreadsheet.new('pSYwzniwpzSFfn0KFRg9oWA')
         
     | 
| 
      
 16 
     | 
    
         
            +
            gs.authenticate(ENV['GDATA_USER'], ENV['GDATA_PASS'])
         
     | 
| 
      
 17 
     | 
    
         
            +
            gs.add_to_cell formula
         
     | 
| 
      
 18 
     | 
    
         
            +
            puts gs.evaluate_cell('A1')
         
     | 
    
        data/bin/removeenclosure
    ADDED
    
    | 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby -I../lib
         
     | 
| 
      
 2 
     | 
    
         
            +
            # --------------------------------------------------------------------------
         
     | 
| 
      
 3 
     | 
    
         
            +
            # removeenclosure - given a blog id and entry id, nuke the given enclosure
         
     | 
| 
      
 4 
     | 
    
         
            +
            # --------------------------------------------------------------------------
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'gdata/blogger'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            unless ENV['GDATA_USER'] and ENV['GDATA_PASS']
         
     | 
| 
      
 9 
     | 
    
         
            +
              puts "$0 requires GDATA_USER and GDATA_PASS to be set"
         
     | 
| 
      
 10 
     | 
    
         
            +
              exit
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            blog_id  = ARGV.first or raise "#{$0}: need a blog id and an entry id (% removeenclosure blogid entryid)"
         
     | 
| 
      
 14 
     | 
    
         
            +
            entry_id = ARGV[1]    or raise "#{$0}: need an entry id after the blog id (% removeenclosure blogid entryid)"
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            blogger = GData::Blogger.new(blog_id, entry_id)
         
     | 
| 
      
 17 
     | 
    
         
            +
            blogger.authenticate(ENV['GDATA_USER'], ENV['GDATA_PASS'])
         
     | 
| 
      
 18 
     | 
    
         
            +
            blogger.remove_enclosure
         
     | 
    
        data/lib/gdata.rb
    ADDED
    
    
    
        data/lib/gdata/base.rb
    ADDED
    
    | 
         @@ -0,0 +1,75 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'net/http'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'net/https'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'hpricot'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            # Make it east to use some of the convenience methods using https
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            module Net
         
     | 
| 
      
 11 
     | 
    
         
            +
              class HTTPS < HTTP
         
     | 
| 
      
 12 
     | 
    
         
            +
                def initialize(address, port = nil)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  super(address, port)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  self.use_ssl = true
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            module GData
         
     | 
| 
      
 20 
     | 
    
         
            +
              GOOGLE_LOGIN_URL = URI.parse('https://www.google.com/accounts/ClientLogin')
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              class Base
         
     | 
| 
      
 23 
     | 
    
         
            +
                
         
     | 
| 
      
 24 
     | 
    
         
            +
                attr_reader :service, :source, :url
         
     | 
| 
      
 25 
     | 
    
         
            +
                
         
     | 
| 
      
 26 
     | 
    
         
            +
                def initialize(service, source, url)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @service = service
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @source = source
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @url = url
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                
         
     | 
| 
      
 32 
     | 
    
         
            +
                def authenticate(email, password)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  $VERBOSE = nil
         
     | 
| 
      
 34 
     | 
    
         
            +
                  response = Net::HTTPS.post_form(GOOGLE_LOGIN_URL,
         
     | 
| 
      
 35 
     | 
    
         
            +
                    {'Email'   => email,
         
     | 
| 
      
 36 
     | 
    
         
            +
                     'Passwd'  => password,
         
     | 
| 
      
 37 
     | 
    
         
            +
                     'source'  => source,
         
     | 
| 
      
 38 
     | 
    
         
            +
                     'service' => service })
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  response.error! unless response.kind_of? Net::HTTPSuccess
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  @headers = {
         
     | 
| 
      
 43 
     | 
    
         
            +
                   'Authorization' => "GoogleLogin auth=#{response.body.split(/=/).last}",
         
     | 
| 
      
 44 
     | 
    
         
            +
                   'Content-Type'  => 'application/atom+xml'
         
     | 
| 
      
 45 
     | 
    
         
            +
                  }
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                def request(path)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  response, data = get(path)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  data
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                def get(path)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  response, data = http.get(path, @headers)
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def post(path, entry)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  http.post(path, entry, @headers)
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                def put(path, entry)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  h = @headers
         
     | 
| 
      
 63 
     | 
    
         
            +
                  h['X-HTTP-Method-Override'] = 'PUT' # just to be nice, add the method override
         
     | 
| 
      
 64 
     | 
    
         
            +
              
         
     | 
| 
      
 65 
     | 
    
         
            +
                  http.put(path, entry, h)
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                def http
         
     | 
| 
      
 69 
     | 
    
         
            +
                  conn = Net::HTTP.new(url, 80)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  #conn.set_debug_output $stderr
         
     | 
| 
      
 71 
     | 
    
         
            +
                  conn
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
              end
         
     | 
| 
      
 75 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,51 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'gdata/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module GData
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              class Blogger < GData::Base
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(blog_id, entry_id=nil)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @blog_id = blog_id
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @entry_id = entry_id
         
     | 
| 
      
 10 
     | 
    
         
            +
                  super 'blogger', 'gdata-ruby', 'www.blogger.com'
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def feed
         
     | 
| 
      
 14 
     | 
    
         
            +
                  request "/feeds/#{@blog_id}/posts/default"
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def entry
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @entry ||= Hpricot(request("/feeds/#{@blog_id}/posts/default/#{@entry_id}"))
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def enclosure
         
     | 
| 
      
 22 
     | 
    
         
            +
                  entry.search('//link[@rel="enclosure"]')
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def enclosure?
         
     | 
| 
      
 26 
     | 
    
         
            +
                  enclosure.any?
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              
         
     | 
| 
      
 29 
     | 
    
         
            +
                def add_enclosure(enclosure_url, enclosure_length)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  raise "An enclosure has already been added to this entry" if enclosure?
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  entry.search('//entry').append(qq|<link rel="enclosure" type="audio/mpeg" title="MP3" href="#{enclosure_url}" length="#{enclosure_length}" />|)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  save_entry
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def remove_enclosure
         
     | 
| 
      
 37 
     | 
    
         
            +
                  if enclosure?
         
     | 
| 
      
 38 
     | 
    
         
            +
                    enclosure.remove
         
     | 
| 
      
 39 
     | 
    
         
            +
                    save_entry
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def save_entry
         
     | 
| 
      
 44 
     | 
    
         
            +
                  path = "/feeds/#{@blog_id}/posts/default/#{@entry_id}"
         
     | 
| 
      
 45 
     | 
    
         
            +
              
         
     | 
| 
      
 46 
     | 
    
         
            +
                  put(path, entry.to_s)
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'gdata/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module GData
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              class Spreadsheet < GData::Base
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(spreadsheet_id)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @spreadsheet_id = spreadsheet_id
         
     | 
| 
      
 9 
     | 
    
         
            +
                  super 'wise', 'gdata-ruby', 'spreadsheets.google.com'
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def evaluate_cell(cell)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  path = "/feeds/cells/#{@spreadsheet_id}/1/#{@headers ? "private" : "public"}/basic/#{cell}"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  doc = Hpricot(request(path))
         
     | 
| 
      
 16 
     | 
    
         
            +
                  result = (doc/"content[@type='text']").inner_html
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def save_entry(entry)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  path = "/feeds/cells/#{@spreadsheet_id}/1/#{@headers ? 'private' : 'public'}/full"
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  post(path, entry)
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def entry(formula, row=1, col=1)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  <<XML
         
     | 
| 
      
 27 
     | 
    
         
            +
              <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gs='http://schemas.google.com/spreadsheets/2006'>
         
     | 
| 
      
 28 
     | 
    
         
            +
                <gs:cell row='#{row}' col='#{col}' inputValue='=#{formula}' />
         
     | 
| 
      
 29 
     | 
    
         
            +
              </entry>
         
     | 
| 
      
 30 
     | 
    
         
            +
            XML
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def add_to_cell(formula)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  save_entry(entry(formula))
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            end
         
     | 
    
        data/test/test_gdata.rb
    ADDED
    
    | 
         
            File without changes
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,69 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            rubygems_version: 0.9.2
         
     | 
| 
      
 3 
     | 
    
         
            +
            specification_version: 1
         
     | 
| 
      
 4 
     | 
    
         
            +
            name: GData
         
     | 
| 
      
 5 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 6 
     | 
    
         
            +
              version: 0.0.2
         
     | 
| 
      
 7 
     | 
    
         
            +
            date: 2007-04-06 00:00:00 -07:00
         
     | 
| 
      
 8 
     | 
    
         
            +
            summary: Google GData Ruby API
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 10 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 11 
     | 
    
         
            +
            email: dion@almaer.com
         
     | 
| 
      
 12 
     | 
    
         
            +
            homepage: "    by Dion Almaer"
         
     | 
| 
      
 13 
     | 
    
         
            +
            rubyforge_project: gdata-ruby
         
     | 
| 
      
 14 
     | 
    
         
            +
            description: "== FEATURES/PROBLEMS:  To start out the API set isn't covered. The aim is to support the GData API itself, and then higher level classes for the various Google APIs.  Current support:  * Google Account Authentication: Handle Google ClientLogin API * Google Spreadsheet Data API  Future support:"
         
     | 
| 
      
 15 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 16 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 17 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 18 
     | 
    
         
            +
            has_rdoc: true
         
     | 
| 
      
 19 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Version::Requirement 
         
     | 
| 
      
 20 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 21 
     | 
    
         
            +
              - - ">"
         
     | 
| 
      
 22 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 23 
     | 
    
         
            +
                  version: 0.0.0
         
     | 
| 
      
 24 
     | 
    
         
            +
              version: 
         
     | 
| 
      
 25 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 26 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 27 
     | 
    
         
            +
            cert_chain: 
         
     | 
| 
      
 28 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 29 
     | 
    
         
            +
            authors: 
         
     | 
| 
      
 30 
     | 
    
         
            +
            - Dion Almaer
         
     | 
| 
      
 31 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 32 
     | 
    
         
            +
            - History.txt
         
     | 
| 
      
 33 
     | 
    
         
            +
            - Manifest.txt
         
     | 
| 
      
 34 
     | 
    
         
            +
            - README.txt
         
     | 
| 
      
 35 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 36 
     | 
    
         
            +
            - bin/addenclosure
         
     | 
| 
      
 37 
     | 
    
         
            +
            - bin/bloggerfeed
         
     | 
| 
      
 38 
     | 
    
         
            +
            - bin/gspreadsheet
         
     | 
| 
      
 39 
     | 
    
         
            +
            - bin/removeenclosure
         
     | 
| 
      
 40 
     | 
    
         
            +
            - lib/gdata.rb
         
     | 
| 
      
 41 
     | 
    
         
            +
            - lib/gdata/base.rb
         
     | 
| 
      
 42 
     | 
    
         
            +
            - lib/gdata/blogger.rb
         
     | 
| 
      
 43 
     | 
    
         
            +
            - lib/gdata/spreadsheet.rb
         
     | 
| 
      
 44 
     | 
    
         
            +
            - test/test_gdata.rb
         
     | 
| 
      
 45 
     | 
    
         
            +
            test_files: 
         
     | 
| 
      
 46 
     | 
    
         
            +
            - test/test_gdata.rb
         
     | 
| 
      
 47 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            executables: 
         
     | 
| 
      
 52 
     | 
    
         
            +
            - addenclosure
         
     | 
| 
      
 53 
     | 
    
         
            +
            - bloggerfeed
         
     | 
| 
      
 54 
     | 
    
         
            +
            - gspreadsheet
         
     | 
| 
      
 55 
     | 
    
         
            +
            - removeenclosure
         
     | 
| 
      
 56 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            dependencies: 
         
     | 
| 
      
 61 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 62 
     | 
    
         
            +
              name: hoe
         
     | 
| 
      
 63 
     | 
    
         
            +
              version_requirement: 
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Version::Requirement 
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: 1.2.0
         
     | 
| 
      
 69 
     | 
    
         
            +
                version: 
         
     |