feed_parser 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/Gemfile +7 -0
- data/LICENSE +19 -0
- data/README.md +41 -0
- data/feed_parser.gemspec +26 -0
- data/lib/feed_parser/dsl.rb +33 -0
- data/lib/feed_parser/feed.rb +37 -0
- data/lib/feed_parser/feed_item.rb +54 -0
- data/lib/feed_parser/self_sanitizer.rb +7 -0
- data/lib/feed_parser.rb +31 -0
- data/spec/feed_parser_spec.rb +132 -0
- data/spec/fixtures/TechCrunch.xml +130 -0
- data/spec/fixtures/gcal.atom.xml +211 -0
- data/spec/fixtures/nodeta.rss.xml +346 -0
- data/spec/fixtures/sanitize.me.rss.xml +38 -0
- data/spec/fixtures/smashingmagazine.atom.xml +436 -0
- metadata +90 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2011 Arttu Tervo
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# FeedParser
|
2
|
+
|
3
|
+
Rss and Atom feed parser built on top of Nokogiri. Supports custom sanitizers.
|
4
|
+
|
5
|
+
## Install
|
6
|
+
|
7
|
+
Add to Gemfile
|
8
|
+
|
9
|
+
gem "feed_parser"
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
# the most basic use case
|
14
|
+
fp = FeedParser.new(:url => "http://example.com/feed/")
|
15
|
+
# with sanitizer
|
16
|
+
fp = FeedParser.new(:url => "http://example.com/feed/", :sanitizer => MyBestestSanitizer.new)
|
17
|
+
# sanitizing custom field set
|
18
|
+
fp = FeedParser.new(:url => "http://example.com/feed/", :sanitizer => MyBestestSanitizer.new, :fields_to_sanitize => [:title, :content])
|
19
|
+
|
20
|
+
# parse the feed
|
21
|
+
feed = fp.parse
|
22
|
+
|
23
|
+
# using parsed feed in your code
|
24
|
+
feed.as_json
|
25
|
+
# => {:title => "Feed title", :url => "http://example.com/feed/", :items => [{:guid => , :title => , :author => ...}]}
|
26
|
+
|
27
|
+
feed.items.each do |feed_item|
|
28
|
+
pp feed_item
|
29
|
+
end
|
30
|
+
|
31
|
+
## Running tests
|
32
|
+
|
33
|
+
Install dependencies by running `bundle install`.
|
34
|
+
|
35
|
+
Run rspec tests:
|
36
|
+
|
37
|
+
$ bundle exec rspec
|
38
|
+
|
39
|
+
## Contributing
|
40
|
+
|
41
|
+
Fork, hack, push, create a pull request.
|
data/feed_parser.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# feed_parser.gemspec
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
|
4
|
+
$:.push File.expand_path("../lib", __FILE__)
|
5
|
+
require 'feed_parser'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = 'feed_parser'
|
9
|
+
s.version = FeedParser::VERSION
|
10
|
+
s.platform = Gem::Platform::RUBY
|
11
|
+
s.authors = ['Arttu Tervo']
|
12
|
+
s.email = ['arttu.tervo@gmail.com']
|
13
|
+
s.homepage = 'http://github.com/arttu/feed_parser'
|
14
|
+
s.summary = %q{Rss and Atom feed parser}
|
15
|
+
s.description = %q{Rss and Atom feed parser with sanitizer support built on top of Nokogiri.}
|
16
|
+
|
17
|
+
s.add_dependency 'nokogiri'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rspec-rails', '~> 2.6'
|
20
|
+
|
21
|
+
s.extra_rdoc_files = %w[README.md]
|
22
|
+
s.require_paths = %w[lib]
|
23
|
+
|
24
|
+
s.files = `git ls-files`.split("\n")
|
25
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class FeedParser
|
2
|
+
class Dsl
|
3
|
+
def self.[](type)
|
4
|
+
send(type)
|
5
|
+
end
|
6
|
+
def self.rss
|
7
|
+
{
|
8
|
+
:title => "/rss/channel/title",
|
9
|
+
:url => "/rss/channel/link",
|
10
|
+
:item => "/rss/channel/item",
|
11
|
+
:item_guid => "guid",
|
12
|
+
:item_link => "link",
|
13
|
+
:item_title => "title",
|
14
|
+
:item_categories => "category",
|
15
|
+
:item_author => "creator",
|
16
|
+
:item_content => "encoded",
|
17
|
+
}
|
18
|
+
end
|
19
|
+
def self.atom
|
20
|
+
{
|
21
|
+
:title => "/feed/title",
|
22
|
+
:url => "/feed/link[@rel='self']",
|
23
|
+
:item => "/feed/entry",
|
24
|
+
:item_guid => "id",
|
25
|
+
:item_link => "link",
|
26
|
+
:item_title => "title",
|
27
|
+
:item_categories => "category",
|
28
|
+
:item_author => "author/name",
|
29
|
+
:item_content => "content",
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class FeedParser
|
2
|
+
class Feed
|
3
|
+
attr_reader :type
|
4
|
+
|
5
|
+
def initialize(feed_url)
|
6
|
+
@feed = Nokogiri::XML(open(feed_url))
|
7
|
+
@feed.remove_namespaces!
|
8
|
+
@type = (@feed.search('rss')[0] && :rss || :atom)
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
def title
|
13
|
+
@title = @feed.xpath(Dsl[@type][:title]).text
|
14
|
+
end
|
15
|
+
|
16
|
+
def url
|
17
|
+
_url = @feed.xpath(Dsl[@type][:url]).text
|
18
|
+
@url = (!_url.nil? && _url.length > 0 && _url || @feed.xpath(Dsl[@type][:url]).attribute("href").text)
|
19
|
+
end
|
20
|
+
|
21
|
+
def items
|
22
|
+
klass = (@type == :rss && RssItem || AtomItem)
|
23
|
+
|
24
|
+
@items ||= @feed.xpath(Dsl[@type][:item]).map do |item|
|
25
|
+
klass.new(item)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def as_json
|
30
|
+
{
|
31
|
+
:title => title,
|
32
|
+
:url => url,
|
33
|
+
:items => items.map(&:as_json)
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class FeedParser
|
2
|
+
class FeedItem
|
3
|
+
attr_reader :type
|
4
|
+
|
5
|
+
def initialize(item)
|
6
|
+
@guid = item.xpath(Dsl[@type][:item_guid]).text
|
7
|
+
@title = item.xpath(Dsl[@type][:item_title]).text
|
8
|
+
@author = item.xpath(Dsl[@type][:item_author]).text
|
9
|
+
@content = item.xpath(Dsl[@type][:item_content]).text
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(method_id)
|
14
|
+
if self.instance_variables.map(&:to_sym).include?("@#{method_id}".to_sym)
|
15
|
+
if FeedParser.fields_to_sanitize.include?(method_id)
|
16
|
+
FeedParser.sanitizer.sanitize(self.instance_variable_get("@#{method_id}".to_sym))
|
17
|
+
else
|
18
|
+
self.instance_variable_get("@#{method_id}".to_sym)
|
19
|
+
end
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def as_json
|
26
|
+
{
|
27
|
+
:guid => guid,
|
28
|
+
:link => link,
|
29
|
+
:title => title,
|
30
|
+
:categories => categories,
|
31
|
+
:author => author,
|
32
|
+
:content => content
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class RssItem < FeedItem
|
38
|
+
def initialize(item)
|
39
|
+
@type = :rss
|
40
|
+
super
|
41
|
+
@link = item.xpath(Dsl[@type][:item_link]).text
|
42
|
+
@categories = item.xpath(Dsl[@type][:item_categories]).map{|cat| cat.text}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class AtomItem < FeedItem
|
47
|
+
def initialize(item)
|
48
|
+
@type = :atom
|
49
|
+
super
|
50
|
+
@link = item.xpath(Dsl[@type][:item_link]).attribute("href").text
|
51
|
+
@categories = item.xpath(Dsl[@type][:item_categories]).map{|cat| cat.attribute("term").text}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/feed_parser.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
class FeedParser
|
5
|
+
|
6
|
+
VERSION = "0.1.0"
|
7
|
+
|
8
|
+
def initialize(opts)
|
9
|
+
@url = opts[:url]
|
10
|
+
@@sanitizer = (opts[:sanitizer] || SelfSanitizer.new)
|
11
|
+
@@fields_to_sanitize = (opts[:fields_to_sanitize] || [:content])
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.sanitizer
|
16
|
+
@@sanitizer
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.fields_to_sanitize
|
20
|
+
@@fields_to_sanitize
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse
|
24
|
+
@feed ||= Feed.new(@url)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
require 'feed_parser/dsl'
|
29
|
+
require 'feed_parser/feed'
|
30
|
+
require 'feed_parser/feed_item'
|
31
|
+
require 'feed_parser/self_sanitizer'
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'feed_parser'
|
2
|
+
|
3
|
+
class NotSaneSanitizer
|
4
|
+
def sanitize(str)
|
5
|
+
str.gsub(/flowdock/i, '').gsub('Karri Saarinen', 'Sanitized')
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe FeedParser do
|
10
|
+
describe "#parse" do
|
11
|
+
shared_examples_for "feed parser" do
|
12
|
+
it "should not fail" do
|
13
|
+
lambda {
|
14
|
+
@feed = @feed_parser.parse
|
15
|
+
}.should_not raise_error
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should populate every item" do
|
19
|
+
@feed = @feed_parser.parse
|
20
|
+
@feed.items.each do |item|
|
21
|
+
[:guid, :link, :title, :categories, :author, :content].each do |attribute|
|
22
|
+
item.send(attribute).should_not be_nil
|
23
|
+
item.send(attribute).should_not be_empty
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def case_tester(test_cases)
|
30
|
+
test_cases.each do |test_case|
|
31
|
+
if test_case.last.is_a?(Array)
|
32
|
+
test_case.last.each do |_case|
|
33
|
+
@feed.as_json[test_case.first].should include(_case)
|
34
|
+
end
|
35
|
+
else
|
36
|
+
@feed.send(test_case.first).should include(test_case.last)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "rss feeds" do
|
42
|
+
before :each do
|
43
|
+
@feed_parser = FeedParser.new(:url => File.join(File.dirname(__FILE__), 'fixtures', 'nodeta.rss.xml'))
|
44
|
+
end
|
45
|
+
|
46
|
+
after :each do
|
47
|
+
@feed.type.should == :rss
|
48
|
+
end
|
49
|
+
|
50
|
+
{
|
51
|
+
'nodeta.rss.xml' => {
|
52
|
+
:title => "Nodeta",
|
53
|
+
:url => "http://blog.nodeta.fi",
|
54
|
+
:items => [
|
55
|
+
{
|
56
|
+
:guid => "http://blog.nodeta.fi/?p=73",
|
57
|
+
:link => "http://blog.nodeta.fi/2009/01/16/ruby-187-imported/",
|
58
|
+
:title => "Ruby 1.8.7 imported",
|
59
|
+
:categories => ["APIdock", "Ruby"],
|
60
|
+
:author => "Otto Hilska",
|
61
|
+
:content => "<p>I just finished importing Ruby 1.8.7 to APIdock. It’s also the new default version, because usually it is better documented. However, there’re some incompatibilities between 1.8.6 and 1.8.7, so be sure to check the older documentation when something seems to be wrong.</p>\n"
|
62
|
+
}
|
63
|
+
]
|
64
|
+
},
|
65
|
+
'TechCrunch.xml' => {
|
66
|
+
:title => "TechCrunch",
|
67
|
+
:url => "http://techcrunch.com",
|
68
|
+
# items: [] # <- fill in if you want to
|
69
|
+
},
|
70
|
+
}.each do |rss_fixture, test_cases|
|
71
|
+
it "should parse #{rss_fixture}" do
|
72
|
+
@feed_parser = FeedParser.new(:url => File.join(File.dirname(__FILE__), 'fixtures', rss_fixture))
|
73
|
+
|
74
|
+
@feed = @feed_parser.parse
|
75
|
+
|
76
|
+
case_tester(test_cases)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should sanitize with custom sanitizer" do
|
81
|
+
@feed_parser = FeedParser.new(:url => File.join(File.dirname(__FILE__), 'fixtures', 'sanitize.me.rss.xml'), :sanitizer => NotSaneSanitizer.new)
|
82
|
+
|
83
|
+
@feed = @feed_parser.parse
|
84
|
+
|
85
|
+
@feed.items.first.content.should_not =~ (/flowdock/i)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should sanitize custom fields" do
|
89
|
+
@feed_parser = FeedParser.new(:url => File.join(File.dirname(__FILE__), 'fixtures', 'sanitize.me.rss.xml'), :sanitizer => NotSaneSanitizer.new, :fields_to_sanitize => [:author, :content])
|
90
|
+
|
91
|
+
@feed = @feed_parser.parse
|
92
|
+
|
93
|
+
@feed.items.first.author.should == 'Sanitized'
|
94
|
+
end
|
95
|
+
|
96
|
+
it_should_behave_like "feed parser"
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "atom feeds" do
|
100
|
+
before :each do
|
101
|
+
@feed_parser = FeedParser.new(:url => File.join(File.dirname(__FILE__), 'fixtures', 'smashingmagazine.atom.xml'))
|
102
|
+
end
|
103
|
+
|
104
|
+
after :each do
|
105
|
+
@feed.type.should == :atom
|
106
|
+
end
|
107
|
+
|
108
|
+
{
|
109
|
+
'gcal.atom.xml' => {
|
110
|
+
:title => "dokaus.net",
|
111
|
+
:url => "http://www.google.com/calendar/feeds/gqqcve4dv1skp0ppb3tmbcqtko%40group.calendar.google.com/public/basic?max-results=25",
|
112
|
+
# items: [] # <- fill in if you want to
|
113
|
+
},
|
114
|
+
'smashingmagazine.atom.xml' => {
|
115
|
+
:title => "Smashing Magazine",
|
116
|
+
:url => "http://www.smashingmagazine.com/feed/atom/",
|
117
|
+
# items: [] # <- fill in if you want to
|
118
|
+
}
|
119
|
+
}.each do |atom_fixture, test_cases|
|
120
|
+
it "should parse #{atom_fixture}" do
|
121
|
+
@feed_parser = FeedParser.new(:url => File.join(File.dirname(__FILE__), 'fixtures', atom_fixture))
|
122
|
+
|
123
|
+
@feed = @feed_parser.parse
|
124
|
+
|
125
|
+
case_tester(test_cases)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
it_should_behave_like "feed parser"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
|
3
|
+
|
4
|
+
<channel>
|
5
|
+
<title>TechCrunch</title>
|
6
|
+
|
7
|
+
<link>http://techcrunch.com</link>
|
8
|
+
<description>TechCrunch is a group-edited blog that profiles the companies, products and events defining and transforming the new web.</description>
|
9
|
+
<lastBuildDate>Fri, 12 Nov 2010 12:16:33 +0000</lastBuildDate>
|
10
|
+
<language>en</language>
|
11
|
+
<sy:updatePeriod>hourly</sy:updatePeriod>
|
12
|
+
<sy:updateFrequency>1</sy:updateFrequency>
|
13
|
+
<generator>http://wordpress.com/</generator>
|
14
|
+
<cloud domain="techcrunch.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
|
15
|
+
<image><link>http://www.techcrunch.com</link><url>http://www.techcrunch.com/wp-content/themes/techcrunchmu/images/techcrunch_logo.png</url><title>TechCrunch</title></image>
|
16
|
+
<atom:link rel="search" type="application/opensearchdescription+xml" href="http://techcrunch.com/osd.xml" title="TechCrunch" />
|
17
|
+
|
18
|
+
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Techcrunch" /><feedburner:info uri="techcrunch" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://techcrunch.com/?pushpress=hub" /><feedburner:emailServiceId>Techcrunch</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FTechcrunch" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FTechcrunch" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FTechcrunch" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Techcrunch" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FTechcrunch" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FTechcrunch" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FTechcrunch" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><item>
|
19
|
+
<title>A World Of Tweets</title>
|
20
|
+
<link>http://feedproxy.google.com/~r/Techcrunch/~3/AkxOBCtgmWc/</link>
|
21
|
+
<comments>http://techcrunch.com/2010/11/12/a-world-of-tweets/#comments</comments>
|
22
|
+
<pubDate>Fri, 12 Nov 2010 12:10:59 +0000</pubDate>
|
23
|
+
<dc:creator>Robin Wauters</dc:creator>
|
24
|
+
<category><![CDATA[TC]]></category>
|
25
|
+
<category><![CDATA[a world of tweets]]></category>
|
26
|
+
<category><![CDATA[frog design]]></category>
|
27
|
+
<category><![CDATA[Twitter]]></category>
|
28
|
+
|
29
|
+
<guid isPermaLink="false">http://techcrunch.com/?p=243380</guid>
|
30
|
+
<description><![CDATA[<img src="http://tctechcrunch.files.wordpress.com/2010/11/a-world-of-tweets.jpg" />
|
31
|
+
|
32
|
+
Chances are I'm late to the party, given how many Facebook 'likes' and retweets this project seems to have garnered already, but I hadn't yet seen it yet so here goes:
|
33
|
+
|
34
|
+
Some folks over at <a href="http://www.crunchbase.com/company/frog-design">frog design</a> have hacked together <a href="http://aworldoftweets.frogdesign.com/">A World Of Tweets</a>, a Web-based app that <a href="http://designmind.frogdesign.com/blog/a-world-of-tweets.html">visualizes geo-located tweets</a> from around the globe.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techcrunch.com&blog=11718616&post=243380&subd=tctechcrunch&ref=&feed=1" width="1" height="1" />]]></description>
|
35
|
+
<content:encoded><![CDATA[<p><img class="aligncenter" src="http://tctechcrunch.files.wordpress.com/2010/11/a-world-of-tweets.jpg" alt="" /></p>
|
36
|
+
<p>Chances are I’m late to the party, given how many Facebook ‘likes’ and retweets this project seems to have garnered already, but I hadn’t yet seen it yet so here goes:</p>
|
37
|
+
<p>Some folks over at <a href="http://www.crunchbase.com/company/frog-design">frog design</a> have hacked together <a>A World Of Tweets</a>, a Web-based app that <a href="http://designmind.frogdesign.com/blog/a-world-of-tweets.html">visualizes geo-located tweets</a> from around the globe.</p>
|
38
|
+
<p>The project, which was started by two frog design employees as a personal experiment with <a href="http://dev.twitter.com/pages/streaming_api">Twitter’s Streaming API</a> and the HTML5 canvas tag, is all about “playing with geography and bits of information”. It’s also pretty cool to look at.</p>
|
39
|
+
<p>The app shows visitors where people are tweeting /from, in realtime, in the past hour. The more tweets come from a specific region, the “hotter” it becomes.</p>
|
40
|
+
<p>From frog design’s blog post:</p>
|
41
|
+
<blockquote><p>Integrating technology and design, the application was developed in HTML5 deploying the Twitter Streaming API and the Yahoo! Placemaker service to merge geotagged tweets on one single map, processing more than 1.4 million tweets in just 8 days. </p>
|
42
|
+
<p>Due to the growth of automated geo-tagging via mobile devices, the exceptional tweet locations range from the Sahara Desert to Polar Circle diving to the middle of the Atlantic Ocean.</p></blockquote>
|
43
|
+
<p>You can visualize tweets in the form of a heatmap, with ‘smoky clouds’ and either in map or satellite view. If you have 3D red cyan glasses, you can even dive into the “3D stereo view”.</p>
|
44
|
+
<p>At the time of this writing, they’re close to processing more than 2 million tweets from 200 countries (they started processing on November 1).</p>
|
45
|
+
<p>Nifty indeeed.</p>
|
46
|
+
<div class="cbw snap_nopreview"><div class="cbw_header"><script src="http://www.crunchbase.com/javascripts/widget.js" type="text/javascript"></script><div class="cbw_header_text"><a href="http://www.crunchbase.com/">CrunchBase Information</a></div></div><div class="cbw_content"><div class="cbw_subheader"><a href="http://www.crunchbase.com/company/twitter">Twitter</a></div><div class="cbw_subcontent"><script src="http://www.crunchbase.com/cbw/company/twitter.js" type="text/javascript"></script></div><div class="cbw_footer">Information provided by <a href="http://www.crunchbase.com/">CrunchBase</a></div></div></div>
|
47
|
+
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tctechcrunch.wordpress.com/243380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tctechcrunch.wordpress.com/243380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tctechcrunch.wordpress.com/243380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tctechcrunch.wordpress.com/243380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tctechcrunch.wordpress.com/243380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tctechcrunch.wordpress.com/243380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tctechcrunch.wordpress.com/243380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tctechcrunch.wordpress.com/243380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tctechcrunch.wordpress.com/243380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tctechcrunch.wordpress.com/243380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tctechcrunch.wordpress.com/243380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tctechcrunch.wordpress.com/243380/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tctechcrunch.wordpress.com/243380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tctechcrunch.wordpress.com/243380/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techcrunch.com&blog=11718616&post=243380&subd=tctechcrunch&ref=&feed=1" width="1" height="1" />
|
48
|
+
<p><a href="http://feedads.g.doubleclick.net/~at/fY8_vz4qPXPVfAowTC_eqfCMDg8/0/da"><img src="http://feedads.g.doubleclick.net/~at/fY8_vz4qPXPVfAowTC_eqfCMDg8/0/di" border="0" ismap="true"></img></a><br/>
|
49
|
+
<a href="http://feedads.g.doubleclick.net/~at/fY8_vz4qPXPVfAowTC_eqfCMDg8/1/da"><img src="http://feedads.g.doubleclick.net/~at/fY8_vz4qPXPVfAowTC_eqfCMDg8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
|
50
|
+
<a href="http://feeds.feedburner.com/~ff/Techcrunch?a=AkxOBCtgmWc:cJIT965ig-M:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=2mJPEYqXBVI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=AkxOBCtgmWc:cJIT965ig-M:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=AkxOBCtgmWc:cJIT965ig-M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=AkxOBCtgmWc:cJIT965ig-M:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Techcrunch?i=AkxOBCtgmWc:cJIT965ig-M:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=AkxOBCtgmWc:cJIT965ig-M:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Techcrunch?i=AkxOBCtgmWc:cJIT965ig-M:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=AkxOBCtgmWc:cJIT965ig-M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=qj6IDK7rITs" border="0"></img></a>
|
51
|
+
</div><img src="http://feeds.feedburner.com/~r/Techcrunch/~4/AkxOBCtgmWc" height="1" width="1"/>]]></content:encoded>
|
52
|
+
<wfw:commentRss>http://techcrunch.com/2010/11/12/a-world-of-tweets/feed/</wfw:commentRss>
|
53
|
+
<slash:comments>0</slash:comments>
|
54
|
+
|
55
|
+
<media:content url="http://1.gravatar.com/avatar/9ab06106c89a573cd4ef50d04ce3203c?s=96&d=identicon&r=G" medium="image">
|
56
|
+
<media:title type="html">robinw</media:title>
|
57
|
+
</media:content>
|
58
|
+
|
59
|
+
<media:content url="http://tctechcrunch.files.wordpress.com/2010/11/a-world-of-tweets.jpg" medium="image" />
|
60
|
+
<feedburner:origLink>http://techcrunch.com/2010/11/12/a-world-of-tweets/</feedburner:origLink></item>
|
61
|
+
<item>
|
62
|
+
<title>MiniTycoon Casino Becomes Number One Social Games On The iPhone</title>
|
63
|
+
<link>http://feedproxy.google.com/~r/Techcrunch/~3/_6Ri38GttvY/</link>
|
64
|
+
<comments>http://techcrunch.com/2010/11/12/minitycoon-casino-becomes-number-one-social-games-on-the-iphone/#comments</comments>
|
65
|
+
<pubDate>Fri, 12 Nov 2010 09:57:19 +0000</pubDate>
|
66
|
+
<dc:creator>Mike Butcher</dc:creator>
|
67
|
+
<category><![CDATA[TC]]></category>
|
68
|
+
|
69
|
+
<guid isPermaLink="false">http://techcrunch.com/?p=243373</guid>
|
70
|
+
<description><![CDATA[<img src="http://eu.techcrunch.com/wp-content/uploads/photo-11.png" class="shot2" />Less than a week after its global launch, <a href="http://www.sgn.com/games.php?name=mini_tycoon">MiniTycoon Casino,</a> is now the number one mobile social game on the iPhone ahead of the real social games including Empire City, TapZoo, Restaurant Story and Farmville. This is <a href="http://www.sgn.com/">SGN's</a> first pure social game on the iPhone and iPod Touch. No doubt as a result of its social features, it's also now the number one casino game, although you don't bet real money but instead purchase virtual goods to pimp out your place, Soprano like.
|
71
|
+
|
72
|
+
I caught up with CEO and founder Shervin Pishevar at the Monaco Media Forum to discuss the news, video below.
|
73
|
+
|
74
|
+
<a href="http://techcrunch.com/2010/09/29/sgn-mini-tycoon/">Launched at TechCrunch Disrupt</a> in September, it's available free in the App Store <a href="http://itunes.apple.com/us/app/minitycoon-casino/id395928305?mt=8#">here.</a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techcrunch.com&blog=11718616&post=243373&subd=tctechcrunch&ref=&feed=1" width="1" height="1" />]]></description>
|
75
|
+
<content:encoded><![CDATA[<p><img src="http://eu.techcrunch.com/wp-content/uploads/photo-11.png" class="shot2" />Less than a week after its global launch, <a href="http://www.sgn.com/games.php?name=mini_tycoon">MiniTycoon Casino,</a> is now the number one mobile social game on the iPhone ahead of the real social games including Empire City, TapZoo, Restaurant Story and Farmville. This is <a href="http://www.sgn.com/">SGN’s</a> first pure social game on the iPhone and iPod Touch. No doubt as a result of its social features, it’s also now the number one casino game, although you don’t bet real money but instead purchase virtual goods to pimp out your place, Soprano like.</p>
|
76
|
+
<p>I caught up with CEO and founder Shervin Pishevar at the Monaco Media Forum to discuss the news, video below.</p>
|
77
|
+
<p><a href="http://techcrunch.com/2010/09/29/sgn-mini-tycoon/">Launched at TechCrunch Disrupt</a> in September, it’s available free in the App Store <a href="http://itunes.apple.com/us/app/minitycoon-casino/id395928305?mt=8#">here.</a></p>
|
78
|
+
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tctechcrunch.wordpress.com/243373/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tctechcrunch.wordpress.com/243373/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tctechcrunch.wordpress.com/243373/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tctechcrunch.wordpress.com/243373/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tctechcrunch.wordpress.com/243373/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tctechcrunch.wordpress.com/243373/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tctechcrunch.wordpress.com/243373/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tctechcrunch.wordpress.com/243373/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tctechcrunch.wordpress.com/243373/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tctechcrunch.wordpress.com/243373/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tctechcrunch.wordpress.com/243373/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tctechcrunch.wordpress.com/243373/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tctechcrunch.wordpress.com/243373/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tctechcrunch.wordpress.com/243373/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techcrunch.com&blog=11718616&post=243373&subd=tctechcrunch&ref=&feed=1" width="1" height="1" />
|
79
|
+
<p><a href="http://feedads.g.doubleclick.net/~at/jiRLQ49ug9QNeJhUvMxMQMsD0nY/0/da"><img src="http://feedads.g.doubleclick.net/~at/jiRLQ49ug9QNeJhUvMxMQMsD0nY/0/di" border="0" ismap="true"></img></a><br/>
|
80
|
+
<a href="http://feedads.g.doubleclick.net/~at/jiRLQ49ug9QNeJhUvMxMQMsD0nY/1/da"><img src="http://feedads.g.doubleclick.net/~at/jiRLQ49ug9QNeJhUvMxMQMsD0nY/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
|
81
|
+
<a href="http://feeds.feedburner.com/~ff/Techcrunch?a=_6Ri38GttvY:oVaVP8m75ww:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=2mJPEYqXBVI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=_6Ri38GttvY:oVaVP8m75ww:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=_6Ri38GttvY:oVaVP8m75ww:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=_6Ri38GttvY:oVaVP8m75ww:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Techcrunch?i=_6Ri38GttvY:oVaVP8m75ww:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=_6Ri38GttvY:oVaVP8m75ww:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Techcrunch?i=_6Ri38GttvY:oVaVP8m75ww:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=_6Ri38GttvY:oVaVP8m75ww:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=qj6IDK7rITs" border="0"></img></a>
|
82
|
+
</div><img src="http://feeds.feedburner.com/~r/Techcrunch/~4/_6Ri38GttvY" height="1" width="1"/>]]></content:encoded>
|
83
|
+
<wfw:commentRss>http://techcrunch.com/2010/11/12/minitycoon-casino-becomes-number-one-social-games-on-the-iphone/feed/</wfw:commentRss>
|
84
|
+
<slash:comments>0</slash:comments>
|
85
|
+
|
86
|
+
<media:content url="http://1.gravatar.com/avatar/b135cea22fcda40ebd49010703f1d4b8?s=96&d=identicon&r=G" medium="image">
|
87
|
+
<media:title type="html">mike-butcher</media:title>
|
88
|
+
</media:content>
|
89
|
+
|
90
|
+
<media:content url="http://eu.techcrunch.com/wp-content/uploads/photo-11.png" medium="image" />
|
91
|
+
<feedburner:origLink>http://techcrunch.com/2010/11/12/minitycoon-casino-becomes-number-one-social-games-on-the-iphone/</feedburner:origLink></item>
|
92
|
+
<item>
|
93
|
+
<title>Facebook’s Gmail Killer, Project Titan, Is Coming On Monday</title>
|
94
|
+
<link>http://feedproxy.google.com/~r/Techcrunch/~3/wv3Bpz2Nf3k/</link>
|
95
|
+
<comments>http://techcrunch.com/2010/11/11/facebook-gmail-titan/#comments</comments>
|
96
|
+
<pubDate>Fri, 12 Nov 2010 07:47:50 +0000</pubDate>
|
97
|
+
<dc:creator>Jason Kincaid</dc:creator>
|
98
|
+
<category><![CDATA[TC]]></category>
|
99
|
+
<category><![CDATA[Facebook]]></category>
|
100
|
+
|
101
|
+
<guid isPermaLink="false">http://techcrunch.com/?p=243323</guid>
|
102
|
+
<description><![CDATA[<img class="shot2" src="http://tctechcrunch.files.wordpress.com/2010/11/fblogo.png" alt="" />Back in February we wrote about Facebook's secret <a href="http://techcrunch.com/2010/02/05/facebooks-project-titan-a-full-featured-webmail-product/">Project Titan</a> — a web-based email client that we hear is unofficially referred to internally as its "Gmail killer". Now we've heard from sources that this is indeed what's coming on Monday during Facebook's <a href="http://techcrunch.com/2010/11/10/facebook-november-event/">special event</a>, alongside personal @facebook.com email addresses for users.
|
103
|
+
|
104
|
+
This isn't a big surprise — the event invites Facebook sent out hinted strongly that the news would have something to do with its Inbox, sparking plenty of speculation that the event could be related to Titan. Our understanding is that this is more than just a UI refresh for Facebook's existing messaging service with POP access tacked on. Rather, Facebook is building a full-fledged webmail client, and while it may only be in early stages come its launch Monday, there's a huge amount of potential here.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techcrunch.com&blog=11718616&post=243323&subd=tctechcrunch&ref=&feed=1" width="1" height="1" />]]></description>
|
105
|
+
<content:encoded><![CDATA[<p><img class="shot2" src="http://tctechcrunch.files.wordpress.com/2010/11/fblogo.png" alt="" />Back in February we wrote about Facebook’s secret <a href="http://techcrunch.com/2010/02/05/facebooks-project-titan-a-full-featured-webmail-product/">Project Titan</a> — a web-based email client that we hear is unofficially referred to internally as its “Gmail killer”. Now we’ve heard from sources that this is indeed what’s coming on Monday during Facebook’s <a href="http://techcrunch.com/2010/11/10/facebook-november-event/">special event</a>, alongside personal @facebook.com email addresses for users.</p>
|
106
|
+
<p>This isn’t a big surprise — the event invites Facebook sent out hinted strongly that the news would have something to do with its Inbox, sparking plenty of speculation that the event could be related to Titan. Our understanding is that this is more than just a UI refresh for Facebook’s existing messaging service with POP access tacked on. Rather, Facebook is building a full-fledged webmail client, and while it may only be in early stages come its launch Monday, there’s a huge amount of potential here.</p>
|
107
|
+
<p>Facebook has the world’s most popular photos product, the most popular events product, and soon will have a very popular local deals product as well. It can tweak the design of its webmail client to display content from each of these in a seamless fashion (and don’t forget messages from games, or payments via Facebook Credits). And there’s also the social element: Facebook knows who your friends are and how closely you’re connected to them; it can probably do a pretty good job figuring out which personal emails you want to read most and prioritize them accordingly.</p>
|
108
|
+
<p>Oh, and assuming our sources prove accurate, this explains the timing of the <a href="http://techcrunch.com/2010/11/09/facebook-slaps-google-openness-doesnt-mean-being-open-when-its-convenient/">Google/Facebook slap fight </a>over contact information.</p>
|
109
|
+
<p>We’ll keep digging for more details and will have full coverage on Monday.<br />
|
110
|
+
<img src="http://tctechcrunch.files.wordpress.com/2010/11/fb.jpg?w=630&h=459" alt="" /></p>
|
111
|
+
<p><em>Image by <a href="http://www.flickr.com/photos/spencereholtaway/3376955055/">Spencereholtaway</a></em><br />
|
112
|
+
<div class="cbw snap_nopreview"><div class="cbw_header"><script src="http://www.crunchbase.com/javascripts/widget.js" type="text/javascript"></script><div class="cbw_header_text"><a href="http://www.crunchbase.com/">CrunchBase Information</a></div></div><div class="cbw_content"><div class="cbw_subheader"><a href="http://www.crunchbase.com/company/facebook">Facebook</a></div><div class="cbw_subcontent"><script src="http://www.crunchbase.com/cbw/company/facebook.js" type="text/javascript"></script></div><div class="cbw_footer">Information provided by <a href="http://www.crunchbase.com/">CrunchBase</a></div></div></div></p>
|
113
|
+
<br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tctechcrunch.wordpress.com/243323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tctechcrunch.wordpress.com/243323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tctechcrunch.wordpress.com/243323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tctechcrunch.wordpress.com/243323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tctechcrunch.wordpress.com/243323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tctechcrunch.wordpress.com/243323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tctechcrunch.wordpress.com/243323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tctechcrunch.wordpress.com/243323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tctechcrunch.wordpress.com/243323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tctechcrunch.wordpress.com/243323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tctechcrunch.wordpress.com/243323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tctechcrunch.wordpress.com/243323/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tctechcrunch.wordpress.com/243323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tctechcrunch.wordpress.com/243323/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=techcrunch.com&blog=11718616&post=243323&subd=tctechcrunch&ref=&feed=1" width="1" height="1" />
|
114
|
+
<p><a href="http://feedads.g.doubleclick.net/~at/hq77QLZgQy_A9E63a6trlWrkRTw/0/da"><img src="http://feedads.g.doubleclick.net/~at/hq77QLZgQy_A9E63a6trlWrkRTw/0/di" border="0" ismap="true"></img></a><br/>
|
115
|
+
<a href="http://feedads.g.doubleclick.net/~at/hq77QLZgQy_A9E63a6trlWrkRTw/1/da"><img src="http://feedads.g.doubleclick.net/~at/hq77QLZgQy_A9E63a6trlWrkRTw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
|
116
|
+
<a href="http://feeds.feedburner.com/~ff/Techcrunch?a=wv3Bpz2Nf3k:1Th1_ZA_eyQ:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=2mJPEYqXBVI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=wv3Bpz2Nf3k:1Th1_ZA_eyQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=wv3Bpz2Nf3k:1Th1_ZA_eyQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=wv3Bpz2Nf3k:1Th1_ZA_eyQ:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Techcrunch?i=wv3Bpz2Nf3k:1Th1_ZA_eyQ:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=wv3Bpz2Nf3k:1Th1_ZA_eyQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Techcrunch?i=wv3Bpz2Nf3k:1Th1_ZA_eyQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=wv3Bpz2Nf3k:1Th1_ZA_eyQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=qj6IDK7rITs" border="0"></img></a>
|
117
|
+
</div><img src="http://feeds.feedburner.com/~r/Techcrunch/~4/wv3Bpz2Nf3k" height="1" width="1"/>]]></content:encoded>
|
118
|
+
<wfw:commentRss>http://techcrunch.com/2010/11/11/facebook-gmail-titan/feed/</wfw:commentRss>
|
119
|
+
<slash:comments>0</slash:comments>
|
120
|
+
|
121
|
+
<media:content url="http://0.gravatar.com/avatar/c274c36be9d27b1b38e145a5ce51c7ac?s=96&d=identicon&r=G" medium="image">
|
122
|
+
<media:title type="html">jason</media:title>
|
123
|
+
</media:content>
|
124
|
+
|
125
|
+
<media:content url="http://tctechcrunch.files.wordpress.com/2010/11/fblogo.png" medium="image" />
|
126
|
+
|
127
|
+
<media:content url="http://tctechcrunch.files.wordpress.com/2010/11/fb.jpg?w=630&h=459" medium="image" />
|
128
|
+
<feedburner:origLink>http://techcrunch.com/2010/11/11/facebook-gmail-titan/</feedburner:origLink></item>
|
129
|
+
</channel>
|
130
|
+
</rss>
|