2011-05-09 3 views
1

나는 그것이 API의 사용, 구글 리더로 구독을 추가하려고 해요를 사용하여 Google 리더에 피드를 추가 할 때 :루비/HTTParty : 타이밍 밖으로 그러나 나는 다음과 같은 오류지고있어, 자사의 API

execution expired

을 구독이나 태그 목록을 읽는 데 문제가 없었습니다 ('get'사용). 하지만 하위 ('post'를 사용하여)를 추가하려고하면 시간이 초과됩니다.

이 코드는 Ruby on Rails로 작성되었으며 HTTParty를 사용하여 웹 서비스와의 통신을 처리합니다.

내 코드는 다음과 같다. (내가 루비/레일 여전히 어떤 나쁜 관행이 아래에 포함을 위해 정말 죄송 새로 온 나는 그들이 나에게 지적 가지고보다 더 행복 해요) :

class ReaderUser 

    # Include HTTParty - this handles all the GET and POST requests. 
    include HTTParty 

    ... 

    def add_feed(feed_url) 

     # Prepare the query 
     url = "http://www.google.com/reader/api/0/subscription/quickadd?client=scroll" 
     query = { :quickadd => feed_url, :ac => 'subscribe', :T => @token } 
     query_as_string = "quickadd=#{CGI::escape(feed_url)}&ac=subscribe&T=#{CGI::escape(@token.to_s)}" 
     headers = { "Content-type" => "application/x-www-form-urlencoded; charset=UTF-8", "Content-Length" => query_as_string.length.to_s, "Authorization" => "GoogleLogin auth=#{@auth}" } 

     # Execute the query 
     self.class.post(url, :query => query, :headers => headers) 

    end 

    ... 

end 

참조 용으로 토큰을 얻는 방법은 다음과 같습니다.

# Obtains a token from reader 
# This is required to 'post' items 
def get_token 

    # Populate @auth 
    get_auth 

    # Prepare the query 
    url = 'http://www.google.com/reader/api/0/token' 
    headers = {"Content-type" => "application/x-www-form-urlencoded", "Authorization" => "GoogleLogin auth=#{@auth}" } 

    # Execute the query 
    @token = self.class.get(url, :headers => headers) 

end 

# Obtains the auth value. 
# This is required to obtain the token and for other queries. 
def get_auth 

    # Prepare the query 
    url = 'https://www.google.com/accounts/ClientLogin' 
    query = { :service => 'reader', :Email => @username, :Passwd => @password } 

    # Execute the query 
    data = self.class.get(url, :query => query) 

    # Find the string positions of AUTH 
    auth_index = data.index("Auth=") + 5 

    # Now extract the values of the auth 
    @auth = data[auth_index,data.length] 

end 

필요한 추가 정보를 제공해 드리겠습니다.

미리 감사드립니다.

답변

0

엄청난 양의 어지러운 뒤에도 해결책을 찾았습니다!

단순히 Content-Length를 "0"으로 설정해야했습니다. 이전에 필자는 PHP 클래스에 따라 '쿼리'의 길이를 설정했습니다 (greader.class.php). 나는 누군가 다른 사람이 같은 문제를 안고있는 경우를 대비해서 이것을 언급한다.