/
import_controller.rb
150 lines (116 loc) · 3.54 KB
/
import_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
class ImportController < ApplicationController
def request_auth
require 'oauth/consumer'
consumer_key = "eehMnjMSA762fptNBld3RkMMeK8EirOnnYwVqVxY0Ycxpu3w4C"
secret = "w8pNFvkvI6pPEhOhZBpl9SRTxgXYSoHIDnQUe6gbrOdU2GXygV"
@consumer=OAuth::Consumer.new( consumer_key, secret, {
:site => "http://www.tumblr.com",
:scheme => :header,
:http_method => :post,
:request_token_path => "/oauth/request_token",
:access_token_path => "/oauth/access_token",
:authorize_path => "/oauth/authorize"
})
@request_token=@consumer.get_request_token
session[:request_token]=@request_token
session[:feed_url]=params[:feed]
session[:tumblr_url]=params[:blog]
redirect_to @request_token.authorize_url
end
def authorized
require 'oauth/consumer'
@request_token = session[:request_token]
logger.info "Using request token " + @request_token.token
if params[:oauth_token] && params[:oauth_verifier]
@access_token=@request_token.get_access_token({:oauth_verifier => params[:oauth_verifier]})
session[:access_token]=@access_token
else
logger.info "Missing critical URL params"
end
logger.info "Got access token"
create_blog_migration
end
def create_blog_migration
#blog_url = "http://www.ryangerard.net/1/feed"
blog_url = session[:feed_url]
feed = get_feed(blog_url)
@feed_arr = parse_feed(feed)
@feed_arr.each do |p|
logger.info "+++++++++++++++++++++++"
logger.info p["title"].to_s
logger.info p["pubDate"].to_s
end
#session[:feed_arr]=@feed_arr
write_posts_to_tumblr(@feed_arr)
respond_to do |format|
format.html # authorized.html.erb
end
end
def get_feed(feed_url)
require 'net/http'
require 'uri'
uri = URI.parse(feed_url)
response = Net::HTTP.get_response(uri)
case response
when Net::HTTPSuccess, Net::HTTPRedirection
# OK
logger.info "Success!"
return response.body
else
logger.info "Failure!"
return ''
end
end
def parse_feed(feed)
require 'xml'
parser, parser.string = XML::Parser.new, feed
doc, posts = parser.parse, []
doc.find('//channel/item').each do |p|
logger.info "===================="
logger.info p.name
post = {}
p.children.each do |f|
logger.info "----------------------"
logger.info f.name
logger.info f.first.content
if f.name == "title"
post["title"] = f.first.content
end
if f.name == "pubDate"
post["pubDate"] = f.first.content
end
if f.name == "encoded"
post["encoded"] = f.first.content
end
end
posts << post
end
return posts
end
def write_posts_to_tumblr(posts)
logger.info "Starting write"
#t_url = "http://api.tumblr.com/v2/blog/ryangerard.tumblr.com/post"
t_url = "http://api.tumblr.com/v2/blog/" + session[:tumblr_url] + "/post";
@access_token = session[:access_token]
posts.each do |p|
# build the POST params string
post_params = {
:type => "text",
:date => p["pubDate"].to_s,
:title => p["title"].to_s,
:body => p["encoded"].to_s
}
# Send the request
logger.info "Posting new item to blog"
@response=@access_token.post(t_url, post_params)
case response
when Net::HTTPSuccess, Net::HTTPRedirection
# OK
logger.info "Success!"
else
logger.info "Failure!"
logger.info response.to_s
end
end
end
end