ASP.NET WebForms下获取Evernote笔记列表的技术咨询
如何基于OAuth Verifier获取Evernote笔记列表
既然你已经拿到了oauth_verifier,但现有SDK不适用你的场景,那咱们可以手动走Evernote的OAuth 1.0a流程+API调用来实现需求,你需要重点关注以下几类信息和步骤:
1. 完成OAuth 1.0a的最后一步:换取Access Token
你现在的状态是拿到了验证器,接下来需要用它和之前拿到的临时oauth_token、oauth_token_secret,加上你的开发者应用密钥(consumer key/secret),去请求Evernote的OAuth access token接口:
- 接口地址:沙箱环境用
https://sandbox.evernote.com/oauth/access,生产环境用https://www.evernote.com/oauth/access - 请求方式:POST
- 必须参数:
oauth_verifier、oauth_token、oauth_consumer_key、oauth_nonce(随机字符串)、oauth_timestamp(当前Unix时间戳,秒级)、oauth_signature_method=HMAC-SHA1、oauth_version=1.0,还有最重要的oauth_signature(用HMAC-SHA1算法生成的签名,需要把所有参数、请求URL、HTTP方法一起加密)
生成签名的时候要注意:所有参数需要按字典序排序,URL编码后再拼接,用你的consumer secret和临时token secret作为密钥(格式是{consumer_secret}&{oauth_token_secret})。
2. 掌握Evernote笔记相关的API端点与参数
拿到Access Token后,就可以调用核心API来获取笔记列表了:
- 先获取笔记本列表(可选,但方便过滤笔记):调用
/edam/user/notebooks,参数带上auth=你的Access Token,返回所有笔记本的GUID和名称 - 获取笔记列表:调用
/edam/note/list,必须参数包括auth、userId(可以从Access Token返回的内容里拿到,或者调用/edam/user/get获取用户信息),可选参数有notebookGuid(指定某本笔记本)、offset(分页偏移)、maxNotes(单次返回最大笔记数,最多100)
3. 理解EDAM数据模型结构
Evernote的所有数据都是基于EDAM(Evernote Data Access Model)定义的,你需要了解几个核心对象的结构:
NoteMetadata:笔记的元数据,包含标题、GUID、创建时间、更新时间、笔记本GUID等,这是列表接口返回的主要内容Notebook:笔记本对象,用来分组笔记- 接口默认返回XML格式,你也可以在请求头里指定
Accept: application/json来获取JSON响应,方便解析
4. 处理请求的格式与编码细节
- 所有请求参数都需要做URL编码(遵循RFC 3986标准,空格转
%20而非+) - 签名生成过程中,参数的排序、编码必须严格符合OAuth 1.0a规范,否则会返回签名错误
- 确保请求头里的
Content-Type和你发送的请求体格式匹配(比如POST请求用XML的话,设为application/xml)
简单流程示例
- 换取Access Token的POST请求参数示例(已简化,签名需自行生成):
oauth_consumer_key=YOUR_CONSUMER_KEY oauth_token=YOUR_TEMP_TOKEN oauth_verifier=YOUR_VERIFIER_CODE oauth_nonce=abc123 oauth_timestamp=1699999999 oauth_signature_method=HMAC-SHA1 oauth_version=1.0 oauth_signature=GENERATED_SIGNATURE
- 获取笔记列表的GET请求示例:
https://sandbox.evernote.com/edam/note/list?auth=YOUR_ACCESS_TOKEN&userId=12345&maxNotes=50
最后提醒:一定要区分沙箱和生产环境,沙箱的应用密钥和数据都是独立的,测试没问题再切换到生产环境。
内容的提问来源于stack exchange,提问作者nudrick
相关产品推荐
相关产品推荐

