SSP的日历功能开发详解
写在前面
在玩ssp的时候发现了“日历”这样的功能,查了一下之后发现目前并没有关于日历的太多的中文资料。(口胡,只要是伪春菜的中文资料都没有多少好么!)由于发现有在线更新功能(好神奇!),就研究了一下,以下是研究笔记~
日历在线获取相关说明
calendar/plugin
这个文件夹是存放所有在线日历相关插件的文件……似乎是可以任意创建目录的样子(大概类似ghost/shell这样的拓展)
创建的文件夹需要包含下面这么几个基本的文件:
config.txt
这个文件大致是用来给ssp读取在线日程表的相关信息的。
编码:ANSI(中文版cssp就用GBK就好啦~~)
格式(//之后的内容为千梦的注释~不要写到文件里面哟。):
name,千梦的日程表 //这里是在线日程表的名字
dllname,schedule.dll //无需修改
post,support //是否支持提交日程?支持=support,不支持无需此行
id,d6abc6dd-f512-4734-b018-c7c07b5f09d1 //日程表的guid,随便写一个就好啦~
descript.txt
这个文件是用来给schedule.dll读取在线信息的。
编码:取决于网页编码
格式:
charset,utf-8 //网页和本文件的编码
parse.start,<calendar> //日历在网页中的起始部分
parse.end,</calendar> //日历在页面中的结束部分
date.start,<day date=" //日历日期的前缀
date.end,"> //日历日期的后缀
element.start,<![CDATA[ //日历日程的前缀
element.end,]]> //日程的后缀
element.token,<!--SPLIT--> //多个日程的分隔符
element.skipbytes,0 //跳过多少个字符?
element.skip, //跳过的字符列表
get.url,http://127.0.0.1/webcal.xml //这里是获取日历信息的url
get.data,year=%[y]&month=%[m] //获取信息时的get参数
get.method,GET //获取信息所用的HTTP方法
post.url,http://127.0.0.1/webcal.php //这里是用来提交日历信息的url
post.data,year=%[y]&month=%[m]&day=%[d]&title=%[t] //POST的数据
post.method,POST //提交信息所使用的HTTP方法
其中start,end貌似是可以用?代替一个字符,相应的*代替任意多个字符。
举一个栗子说明一下……以上的GET日历信息的部分,对应的网页文件是酱紫的~:
<calendar>
<day date="1">
<![CDATA[Hello<!--SPLIT-->world!]]>
</day>
<day date="2">
<![CDATA[Hello 2 world!]]>
</day>
<day date="3">
<![CDATA[中文的测试。]]>
</day>
<day date="dummy">
<![CDATA[dummy]]>
</day>
</calendar>
这样会在当前的1日创建一个“hello”和一个“world!”事件,2日创建一个“Hello 2 world!”的事件,3日则是“中文的测试。”事件。
什么?你问dummy是什么?这货也不知道啊OTL,可是没有这个dummy最后一条消息就读入不能……所以加上这条没用的消息之后,被抛弃的就是这一条了……
SCHEDULE.dll
听说是用来读取网页信息的dll。没有拆开来研究过。(其实是不会吧喂!)
看参考资料,似乎只要实现几个函数就好:
extern "C" __declspec(dllexport) BOOL __cdecl load(HGLOBAL h, long len);
extern "C" __declspec(dllexport) BOOL __cdecl unload();
extern "C" __declspec(dllexport) HGLOBAL __cdecl getversion(long *len);
extern "C" __declspec(dllexport) HGLOBAL __cdecl geturl(long *len,long year,long month,long day);
extern "C" __declspec(dllexport) HGLOBAL __cdecl getschedule(HGLOBAL h, long *len);
extern "C" __declspec(dllexport) HGLOBAL __cdecl geturlpost(HGLOBAL h, long *len,long* method);
总之有现成的干嘛自己实现嘛OTL。
(nar包限定)install.txt
嗯,因为要手动创建这样的日历实在是太痛苦了,于是可爱的nar又来了XD。
只需要和传统的nar文件一样建立就好了,就是把上面三个文件打成一个zip,然后写上这样的install.txt:
type,calendar plugin
directory,thousandsmoe //这里是安装日历插件的目录名字
然后就可以安装上日历插件啦~撒花~
其它的问题
目前好像没有办法实现标题、事件、时间、樱语的设定,只能默认的标题、内容和樱语都保持一样的样子。
尝试了在网页里写type,year,month,day,starthour,startminute,endhour,endminute,caption,subtitle,script
,得到的结果却是一大串文字返回到了标题里。
大概下次要试着弄一个dll来看看。
参考文档
唔……其实这货也看不懂日文啦。