V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shao
V2EX  ›  分享发现

知乎日报更新了,支持分享到Evernote,但...!

  •  
  •   shao · 2013-06-20 10:36:18 +08:00 · 7275 次点击
    这是一个创建于 4178 天前的主题,其中的信息可能已经有所发展或是发生改变。
    但,这算是偷懒吧(如图),正文内容呢?不能就这样一个简单的连接吧。
    我之前用“邮件”方式分享,然后发给自己的evernote邮件,也能达到这样的效果。

    期待真正的分享到evernote功能实现(标题、正文全文、图片保存至evernote)。

    感谢 @clowwindy

    知乎日报.app 已经为我每日睡前读物了。

    36 条回复    2014-05-19 00:22:33 +08:00
    olnyshe
        1
    olnyshe  
       2013-06-20 10:44:46 +08:00
    我也经常看.... 我想知道看到好的回答怎么保存下来.... - -
    csx163
        2
    csx163  
       2013-06-20 10:51:40 +08:00
    要新权限了啊,手机通话权限是什么来的
    offspring
        3
    offspring  
       2013-06-20 11:09:36 +08:00
    应该肯定可以做到 故意做成这样的 为了回答的版权和自身利益吧
    taresky
        4
    taresky  
       2013-06-20 11:16:02 +08:00 via iPhone
    竟然做成这样…… 有任何意义吗?

    全文保存得打开特定答案的分享链接添加到pocket,真的很麻烦!
    clowwindy
        5
    clowwindy  
       2013-06-20 13:18:20 +08:00
    这个版本是 10 号提交的……因为 Evernote 要用自己的私有格式,不支持直接把 HTML 塞给他,两周时间来不及做这个转换了。
    Yang_NH
        6
    Yang_NH  
       2013-06-20 13:22:03 +08:00
    查看原文是否能直接打开知乎app而不通过网页?
    shao
        7
    shao  
    OP
       2013-06-20 13:39:20 +08:00
    @Yang_NH 不能。这问题我上次问过了。

    @clowwindy 嗯,期待下一版本。

    支持知乎日报!
    Xe0n0
        8
    Xe0n0  
       2013-06-20 14:31:37 +08:00
    @clowwindy 如果不使用 Evernote Web API,而是用 SDK 中提供的调用 Evernote for iOS 的方式是可以直接存 HTML 的。
    clowwindy
        9
    clowwindy  
       2013-06-20 14:34:08 +08:00
    @Xe0n0

    如何存?EDAMNote 的 content 只能是合法的 ENML
    Xe0n0
        10
    Xe0n0  
       2013-06-20 15:04:32 +08:00   ❤️ 1
    @clowwindy

    有个方法可以这样用:
    [[EvernoteNoteStore noteStore] saveNewNoteToEvernoteApp:note withType:@"text/html"];

    最终会调用 [[UIApplication sharedApplication] openURL:] 方法,HTML 当作 URL 的内容传给 Evernote for iOS 。

    Evernote iOS SDK sample project 里完整代码是这样的:


    if([[EvernoteSession sharedSession] isEvernoteInstalled]) {
    NSString* filePath = [[NSBundle mainBundle] pathForResource:@"evernote_logo_4c-sm" ofType:@"png"];
    NSData *myFileData = [NSData dataWithContentsOfFile:filePath];
    NSData *dataHash = [myFileData enmd5];
    EDAMData *edamData = [[EDAMData alloc] initWithBodyHash:dataHash size:myFileData.length body:myFileData];
    EDAMResource* resource = [[EDAMResource alloc] initWithGuid:nil noteGuid:nil data:edamData mime:@"image/png" width:0 height:0 duration:0 active:0 recognition:0 attributes:nil updateSequenceNum:0 alternateData:nil];
    NSMutableArray *resources = [NSMutableArray arrayWithObjects:resource,resource, nil];
    NSMutableArray *tagNames = [NSMutableArray arrayWithObjects:@"evernote",@"sdk", nil];
    EDAMNote* note = [[EDAMNote alloc] initWithGuid:nil title:@"Test Note - Evernote SDK" content:@"<strong>Here is my new HTML note</strong>" contentHash:nil contentLength:0 created:0 updated:0 deleted:0 active:YES updateSequenceNum:0 notebookGuid:nil tagGuids:nil resources:resources attributes:nil tagNames:tagNames];
    [[EvernoteSession sharedSession] setDelegate:self];
    [[EvernoteNoteStore noteStore] saveNewNoteToEvernoteApp:note withType:@"text/html"];
    }
    else {
    [self installEvernote:self];
    }

    如果没有安装 Evernote for iOS 会打开一个类 App Store 界面提示安装,也还算方便。
    clowwindy
        11
    clowwindy  
       2013-06-20 17:06:05 +08:00
    @Xe0n0 感谢。这样就是还不能做到不跳转直接分享 HTML。

    综合考虑,改成如果安装了 Evernote App,跳到 App 里分享 HTML,如果没装,直接分享纯文本的全文。
    另外邮件也改为分享 HTML,这样也可以通过邮件分享给别的服务了。
    so898
        12
    so898  
       2013-06-20 17:38:44 +08:00
    @clowwindy
    你们这个项目是不是使用了https://github.com/rnapier/RNCachingURLProtocol 这个来做本地缓存啊?
    能提供一下不使用CoreData的原因么?
    再一个就是如果有使用以上项目的话,不知道有没有在软件中注明使用开源项目的计划?
    lc87624
        13
    lc87624  
       2013-06-21 14:18:34 +08:00
    @taresky 你说的是知乎的客户端么?我用知乎日报的android客户端可以直接把文章内容分享到pocket上
    isayme
        14
    isayme  
       2013-06-21 14:32:30 +08:00
    为什么没有网页版。。。。
    clowwindy
        15
    clowwindy  
       2013-06-21 19:42:14 +08:00   ❤️ 1
    @so898 是的。至于为什么不用 Core Data……因为它不但不能解决我们需要解决的问题,还制造了一堆别的问题。

    @shao @offspring @taresky
    已经提交了,开始等苹果审核。可以用邮件分享全文到 Pocket。
    旧版可以点分享,复制链接,然后打开 Pocket,下面出现一个绿色的 Add,点一下,就好了。

    @shao
    iOS7 上跨应用分享都挂了,微信和 Evernote 跳转过去后都什么也没有发生。如果你还没降回 iOS6,可以先用发邮件给 Evernote 来分享全文……
    so898
        16
    so898  
       2013-06-21 19:51:21 +08:00
    @clowwindy
    好吧,感觉现在cache文件夹里面乱乱的……
    话说你有计划注明使用的开源项目么?
    再一个就是请问一下,我觉得知道RNCachingURLProtocol这个的人挺少的,不知道你们是怎么样选中这个项目的?
    有点冒昧……因为我真的第一次看到有人用……
    keakon
        17
    keakon  
       2013-06-21 20:06:31 +08:00
    @so898 因为搜了一堆资料,发现就这个能劫持所有请求。
    clowwindy
        18
    clowwindy  
       2013-06-21 20:25:57 +08:00 via iPhone   ❤️ 1
    @so898 因为产品现在还没设计关于界面,以后会加上。

    当时来不及修改 API 改成图片本地化方案,就尝试了几个能做全局缓存的库,唯一能满足需求的就是这种 hack protocol 的方法。把它的逻辑稍微改了一下就能 work 了。

    不过这个库有两个问题,不会自动清理缓存,把所有 post 请求变成了 get 请求。这两个问题我 fix 了,其中第二个给作者发过 PR。

    以后应该会改成应用层的缓存管理,也就是资源本地化,不让 webview 自己去下载,不用这种系统 hack 了。

    时间紧,设计经常反复,代码写的糙,时常自己都看不下去。
    so898
        19
    so898  
       2013-06-21 20:32:01 +08:00
    @clowwindy
    每次都是拖页面然后CoreText的给跪了……
    UIWebView真心不好用……或者说可以用的部分太少了……唉……

    原来你也改了不少东西啊……这货我用着就是残的……ORZ……
    shao
        20
    shao  
    OP
       2013-06-21 20:37:48 +08:00
    @clowwindy 我用了1天,就回归iOS6了。

    期待下一版的知乎日报,赞!
    clowwindy
        21
    clowwindy  
       2013-06-21 20:39:08 +08:00 via iPhone
    @so898 数据源是用户产生的 html,各种格式,不用 webview 麻烦,android 也要搞一套。
    so898
        22
    so898  
       2013-06-21 21:17:21 +08:00
    @clowwindy 总觉得按照知乎现在的编辑器样式,可以整体解析之后通过UITableView来呈现的说
    clowwindy
        23
    clowwindy  
       2013-06-21 21:39:56 +08:00
    @so898 有链接、引用、图片、列表,甚至还有代码。
    so898
        24
    so898  
       2013-06-22 02:24:24 +08:00
    @clowwindy 至少都是从上到下排列的嘛,一个个区间刚好就是一个个Cell,这些不同的类型就针对制作不同的Cell就搞定了嘛
    clowwindy
        25
    clowwindy  
       2013-06-22 10:56:31 +08:00
    @so898 因为 html 是 tree,不能这么搞。
    Xe0n0
        26
    Xe0n0  
       2013-06-22 11:14:42 +08:00
    @clowwindy

    SDURLCache 是不是效果好一点?
    https://github.com/rs/SDURLCache

    最初是在 AFNetworking 的一个 issue 里看到他们讨论发现的。
    只用图片 cache 的话可以用相应的 https://github.com/rs/SDWebImage,我用过感觉不错。
    Xe0n0
        27
    Xe0n0  
       2013-06-22 11:15:58 +08:00
    @clowwindy

    抱歉,链接坏掉了。是
    https://github.com/rs/SDWebImage
    dreampuf
        28
    dreampuf  
       2013-06-22 11:20:59 +08:00 via iPhone
    @clowwindy
    @keakon

    enml是xml嵌白名单html,含特殊资源标签。
    Python sdk 的例子有如何处理资源嵌入的例子
    oska874
        29
    oska874  
       2013-06-22 11:22:54 +08:00
    @clowwindy 但是微信已经可以弄到印象里面了啊?
    clowwindy
        30
    clowwindy  
       2013-06-22 13:16:05 +08:00
    @oska874
    V2EX 看不到回复的是几楼……不知道你是对哪句话做的回复?

    @Xe0n0 webview 里的只能用 protocol 去劫持,因为 webview follow HTTP 协议,过期后就让缓存失效了,cache 级别的就没用了。我们的离线逻辑要求即使现在有网,缓存过期了,也不去重新加载。所以这层的只能通过 protocol

    SDURLCache 在 iOS 6 上没有什么用,因为 iOS 6 本身就会缓存到闪存

    SDWebImage 在用,不过是配合 UIImageView 用的

    @dreampuf

    Evernote 的 SDK 槽点很多啊。

    开发期间曾经遇到一个 bug,有一天突然分享不出 Evernote 了。查 log 发现 Evernote 提示“标题不合法”,看了很久也没看出标题不合法在哪里。最后发现今天的新闻标题里面有个回车。然后查文档,说标题要符合正则表达式 "^[^\p{Cc}\p{Z}]([^\p{Cc}\p{Zl}\p{Zp}]{0,253}[^\p{Cc}\p{Z}])?$" 才行。当时就很无语,为什么它不能自己过滤掉非法字符呢。非要让每个开发者都实现一遍过滤。

    ENML 更是这样了,规则有很多条,必须是正确的 XML,符合 http://xml.evernote.com/pub/enml2.dtd ,写一个严谨的 converter 不是容易的事,我们宁愿让用户分享纯文本,也不能让用户有一天因为一个 attribute 没过滤,突然莫名其妙分享不能。所以不如就把 html 塞给 Evernote App 或者邮件发给它的服务器,让他自己去转换,肯定能转换成功。

    如果我们的内容是自己生成的,而不是用户生成的,后台渲染一段 ENML 还是比较容易的。而用户产生的内容,不能简单的过滤一下了事。

    之前调研的时候看到有个 App 分享给 Evernote 的方案是直接把网页截了张图塞给 Evernote,觉得很讽刺。
    Xe0n0
        31
    Xe0n0  
       2013-06-22 17:01:15 +08:00
    @clowwindy 原来是 UIWebView 的缓存,学习了。
    dreampuf
        32
    dreampuf  
       2013-06-22 21:23:13 +08:00 via iPhone
    @clowwindy 不要,在意,细节。
    Evernote 的sdk 从api到实现都可以看出没有内部人员在用。

    我的意思是有白名单就可以简单点出个parser/render,聊胜于无
    clowwindy
        33
    clowwindy  
       2013-07-02 11:12:20 +08:00
    @Xe0n0 今天收到 Evernote 的邮件,要我们取消这种跳转应用的方式。原因是这不是公开的 API,以后随时会取消。要求改为 cloud API。
    shao
        34
    shao  
    OP
       2013-07-02 11:29:12 +08:00
    @clowwindy 啊?那用cloud API,还能全文保存嘛?
    Xe0n0
        35
    Xe0n0  
       2013-07-02 11:37:31 +08:00
    @clowwindy 这样啊,那我也得抓紧修改。既然是非公开 API 怎么还放在样例代码里,费解。
    tomliu
        36
    tomliu  
       2014-05-19 00:22:33 +08:00
    @clowwindy 来挖一下坟,在写一个converter被搞死了。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5471 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 09:12 · PVG 17:12 · LAX 01:12 · JFK 04:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.