——写在文外:按本文内容 *** 作需要一定动手能力,且准备工作稍复杂,但最终实现效果很便利,可以先看预览效果感受下。
自从去年重拾日语 (我相信读者都是理性的,我们只谈文化不谈政治) ,基本每天都会在微信公众号 NewsWebEasy [^ NEWS WEB EASY]上看一篇日语新闻。文章内容虽然用的都是基础词汇,但仍会经常遇到生词。如何快速记录它们就成为一件棘手的事。更重要的是,记录不代表记住,如何复习也是个问题。
有读者应该已经想到,用 Workflow for iOS 这款效率App。嗯,我也确实这么做的,不过早期对 Workflow 功能浅尝辄止,自建的动作也比较低级,遇到生词复制后运行,跳出输入框,手动输入生词的假名、音调、词性和解释,同步到 Evernote。
至于复习,就是经常去翻看记录的生词。话虽如此,可是然并卵,首先是会忘记去看,其次随着记录的生词帆宴携越来越多,打开后看见满满的生词也就不想看了ヾ(。 ̄□ ̄)ツ゜゜゜。
复制生词,通知中心运行 Workflow 动作,提取 沪江小D 上该词相关信息,通过 Quizlet [^ Quizlet] API 添加新的 Flashcard[^ Flashcard]。Flashcards App 根据记忆曲线提醒复习,每次只复祥型习若干生词,再也不会被满屏生词 KO了。
首先预览下动作效果,给你看下去的动力。
先附上 Workflow 动作:动作一 Quizlet获取token ;动作二 日语生词添加Qz
Quizlet 官网注册普通帐号,打开 开发者网站 (需先认证注册邮箱) ,按注释填入表格申请 API Key。
申请完页面如下,后续用到 Client ID 、 Redirect URI 和 Secret Key 。
Token Key 获取的详细流程和参数说明见 官方文档 。主要分为三个步骤:
【1】引导用户到授权服务器的授权入口。该步只需打开下面链接即可。其中 MY_CLIENT_ID 就是前面获得的 Client ID ; scope 表示授权第三方的权利范围,分别为:read、write_set、write_group,这里需要可读写删态伏除的 write_set 权限; RANDOM_STRING 是任意字符串,用于防止 CSRF 攻击 (我也不懂什么鬼) ,搞个随机数即可。
【2】打开上述链接后询问是否授权访问 Quizlet 账户,允许后会转到 Redirect URI 指定的链接并附上 code 参数。复制该链接并用正则表达式提取 code 。Workflow 动作一运行如下图,授权跳转页面后 拷贝 (原则上来说,还需要校验传回来的 state 参数是否和第一步传给服务器的一致,避免 CSRF 攻击 。)
【3】向服务器请求 Token 。 POST 信息按官方要求填入即可。其中 Authorization 一栏内容为 Basic base64-encoded(Client ID:Secret Key) ,该值可自行转换,也可用官方转换好的,详见 该页面 Step 2 中的表格最后一行。
动作一 会把获取到的 Token 复制到剪贴板,把该值粘帖到第二个 Workflow 对应项即可。
本文是针对日语单词,如果是其他语种词汇,尤其是针对英语,各类词典 API 还是很丰富的。英语词汇可考虑添加生词到扇贝服务器, 详见此文 。
目前沪江小D未开放查询 API,只能曲线救国,提取查询后的网页信息。沪江小D 查询链接为 http://dict.hjenglish.com/jp/jc/ 中国 ,利用 Get Contents of URL 获取网页内容,假名ちゅうごく,音调①、词性和释义都在了。
经过多次测试对比,假名和词性都用“【】”包含,而音调都在罗马字发音 (图中为【chuugoku】)后面,释义最好获取 详细释义 后面的第 1、2 条(因为有些词语【词性】后面没有释义)。
利用 正则表达式 分别提取需要的内容,表达式具体写法见 Workflow 动作,不再赘述。需要说明的是:
(1)当网页中“【】”一组也没有时表示未查找到词语信息,需要一个 If 来判断。
(2)最近更新的 魔法变量(Magic Variable) 虽然能简化流程,但本动作需要提取多个信息,且需多次用到,如果全部用魔法变量反倒不方便不直观。
(3)动作中设置了 Show Notification ,便于确认查到的信息,毕竟不是官方 API 支持,有些不常见的生词无法用正则表达式获取到正确的信息。
利用 Get Contents of URL POST 词汇信息到 Quizlet 服务器。其中, Authorization 一栏填入动作一中复制的 Token 。 term 和 definition 可以理解为抽认卡的正反面。
图中 URL 链接如下,其中 187957966 是要上传的 Flashcards 组 ID (不然服务器不知道你要把新的 Flashcards 添加到哪) 。
如何获取该 ID 呢,打开 API test 页面
直接点击蓝色按钮 Send API Request ,
d窗中可以找到 ID,其中 title 对应组名,双字节字符会重新编号,不易辨认。
Flashcard 上传成功后会有通知提示,其中 仅供参考 表示沪江小D对该词仅有基本解释,无发音等信息,一般多为专属词。仅供参考词语不会添加到 Flashcards。
需要说明的是,因为非官方 API 支持,所以查询结果有时会有小 BUG,如果出现烦请告知我。
可以看到,【中国】这个词语相关信息已经添加到 Quizlet 了。
可以选择官方的 Quizlet ,好处是添加新的生词后刷新下就可以学习了。但我个人在用 Flashcards Deluxe,可设置的选项和主题比较丰富,缺点是需要手动更新 Flashcards,如图。第三张图片意思是:词语会被新的替代,但学习进度保留。
显示效果下图
获取了Quizlet 账户完整权限,其实可以作一个寄生于 Workflow 的小程序,除了添加、还可以删除、修改,甚至对 Flashcards 批量 *** 作。更多 *** 作请求方法见 官方示例 。
Workflow 是个了不起的应用,不断更新使得 iOS 能力有了更多可能性。
在编写本文 Workflow 动作时,也学到了很多新知识,比如正则表达式, OAuth 授权流程。因为不懂 HTTP 请求,在获取 Token 时走了很多弯路,当经过一番努力后突然明白了解决了,这种成就感和喜悦之情真是难以言表,简直太棒了。我想这就是人类不断探索进取的源动力之一。
本文 Workflow 动作适合在 iPhone 或 iPad 上阅读新闻使用,如何把电脑上浏览时的日语生词,快速 &批量添加到 Quizlet 生成 Flashcards 呢。这个还是看大家对本文的反馈吧,人少就没必要发了。
[^ NEWS WEB EASY]: NEWS WEB EASY やさしい日本语のニュースです,类似 VOA 慢速英语,NWES WEB EASY 发布的新闻都是用简单词汇和基础语法,便于日语初学者和日本小学生阅读。
[^ Quizlet]: 在线 Flashcards 网站,提供 iOS 和 android 客户端。
[^ Flashcard]: Flashcard,即抽认卡 。
实现步骤:创建自定义workflow activity ,实现对CRM数据更新。
创建自定义workflow,实现整个流程。
集成自定义workflow到CRM.
?
创建自定义workflow activity
启动 Microsoft Visual Studio 2010。
在"文件"菜单上,单击"新建",然后单击"项目"。
在"新建项目"对话框的"已安装的模板"窗格中,选择"Visual C#"下的"工作流",然后选择"活动库"。
指定解决方案的名称和位置,然后单击"确定"。
导航到"项目"菜单并选择"属性"。在"应用程序"选项卡上,指定".NET Framework 4"作为目标框架。
添加对 Microsoft.Xrm.Sdk.dll 和 Microsoft.Xrm.Workflow.dll 程序集的引用。
删除项目中的 Activity1.xaml 文件。
将类文件 (.cs) 添加到项目中。在解决方案资源管理器中,右键单击项目,选择"添加",然后单击"类"。在"添加新项"对话框中,键入类的名称,然后单击"添加"。
打开类文件,然后添加以下 using 指令:
using System.Activities
using Microsoft.Xrm.Sdk
using Microsoft.Xrm.Sdk.Workflow
使该类继承自 CodeActivity 类:
public class SampleCustomActivity : CodeActivity
通过添加Execute方法为类添加功能:
protected override void Execute(CodeActivityContext context)
{
//Activity code
Update Data here
}
编译项目以创建程序集 (.dll)。
?
?
创建自定义workflow
若要使用在 Microsoft Dynamics CRM 之外创建或修改的 XAML 工作流,请确保:
您的用户帐户在 Microsoft Dynamics CRM 中具有 Deployment Administrator权限。
在 Microsoft Dynamics CRM 服知友郑务器上启用了声明性工作流。 PowerShell($setting.AllowDeclarativeWorkflows="True")
创建工告答作流项目
在 Microsoft Visual Studio 中的"文件"菜单上,选择"新建",然后单击"项目"。
在"已安装模板"下展开"Visual C#",然后单击"工作流"。
单击"活动库",选择".NET Framework 4",为项目指定名称和位置,然后单击"确定"。
在"解决方案资源管理器"中,右键单击"搭颂活动库",然后单击"添加引用"。
单击"浏览",并找到 Microsoft.Xrm.Sdk.dll 和 Microsoft.Xrm.Sdk.Workflow.dll文件。选择这些文件并将其添加到项目。
进行工作流的定制。
集成自定义workflow到CRM.
使用插件注册工具来注册自定义工作流活动程序集到CRM。
构建 Plug-in Registration 工具。您可在SDK\Tools\PluginRegistration 文件夹中找到该工具的源代码。若要构建和使用插件注册工具,您必须首先安装 Windows Identity Foundation。
用户帐户必须具有系统定制员或系统管理员角色。
导入自定义的workflow
%TrainingKit%\Labs\WorkflowVS2010\Sources\Assets\WorkflowXamlTool.
打开 WorkflowXamlTool.sln, 修改workflow name and primaryentity ,执行solution.
?
var newWF = new Entity("workflow")
newWF.Attributes.Add("name", "On test 10311")
newWF.Attributes.Add("type", new OptionSetValue(1))
newWF.Attributes.Add("scope", new OptionSetValue(4))
newWF.Attributes.Add("category", new OptionSetValue(0))
newWF.Attributes.Add("primaryentity", "abc_dummy")
newWF.Attributes.Add("xaml", content2)
newWF.Attributes.Add("ondemand", true)
?
try
{
_serviceProxy.Create(newWF)
?
MessageBox.Show("Workflow successfully imported.", "Import",MessageBoxButtons.OK, MessageBoxIcon.Information)
}
catch (FaultException ex)
{
}
选择自定义xaml 文件,导入。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)