【发布时间】:2017-05-02 10:21:12
【问题描述】:
我们目前在尝试获取新任务时收到此 400 错误:
{"error_parameters":{},"error_detail":null,"error_propagate":false,"request":{"url":"http:\/\/api.podio.com\/task","query_string":"completed=true&completed_on=-5d&fields=completed_on&limit=100&offset=0&sort_by=rank&sort_desc=false&space=3798819","method":"GET"},"error_description":"Invalid token '(files,tags,votes)'","error":"invalid_value"}
您知道我们不会将其用于内部目的,而是有一个集成设置,允许任务同步和完成。
我们正在循环对所有空间任务进行分页:
get('/task', { space: project_link.remote_id, sort_by: 'rank', limit: limit, offset: offset, sort_desc: false, completed: completed, fields: 'completed_on' })
编辑:
def sync_project(project_link)
existing_remote_ids = _synced_remote_task_ids(project_link.link_id)
synced_project_ids = []
[{completed: false}, {completed: true}].each do |params|
offset = 0
loop do
tasks, next_offset = tasks_page_for_project(project_link: project_link, offset: offset, **params)
tasks.each do |task|
remote_task = map_podio_task(task, project_link.link_id)
_process_task(remote_task)
synced_project_ids << remote_task[:id].to_s
end
offset = next_offset
break unless next_offset
end
end
_mark_tasks_deleted(existing_remote_ids - synced_project_ids)
end
def tasks_page_for_project(project_link:, offset:, completed: false)
next_offset = nil
limit = 100
params = { space: project_link.remote_id, sort_by: 'rank', limit: limit, offset: offset, sort_desc: false, completed: completed, fields: 'completed_on' }
params[:completed_on] = '-5d' if completed
tasks = get('/task', params)
if tasks.size == limit
next_offset = offset + limit
end
return tasks, next_offset
rescue TaskSync::ProjectRemovedError => ex
raise TaskSync::ProjectRemovedError.new(self, project_link.remote_id), ex.message
rescue TaskSync::TemporaryNetworkError => ex
ex.project_id = project_link.remote_id
raise ex
end
def service
check_token
@service ||= build_client(href, 'Authorization' => "OAuth2 #{token[:token]}")
end
def authorization
params = {
grant_type: 'refresh_token',
client_id: TaskSync.config[:podio][:client_id],
client_secret: TaskSync.config[:podio][:client_secret],
refresh_token: token[:refresh_token]
}
build_client 'https://podio.com/oauth/token', { 'Content-Type' => 'application/x-www-form-urlencoded' }, params
end
def href
'https://api.podio.com'
end
而且这个错误只发生在单个客户端。
你能告诉我们这个错误是什么意思吗?是与 OAuth 相关还是与其他方面有关?
谢谢!
【问题讨论】:
-
您能否提供代码示例,以便我尝试重现此问题?
-
编辑了集成的最大部分。响应通过
JSON.parse(respone.body)简单地解析,并根据状态码我们要么返回它,要么引发相应的错误。 -
感谢样品。这似乎与 oAuth 无关,而是与如何检索任务的详细信息有关。您能否尝试一种可能的修复方法:将 '-5d' 替换为 '5_days' 或此处的其他可用选项:developers.podio.com/doc/tasks/get-tasks-77949(还有一种可能的修复方法:将 'files:false' 添加到参数列表中)
-
感谢@Pavlo-Podio!我会尝试一下,并在几天后回复你,看看它是否仍然会发生。
-
这方面有什么更新吗?
标签: podio