写在前面

在玩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来看看。

参考文档

SSP技術資料 - カレンダー

唔……其实这货也看不懂日文啦。