1
toothpaste 2012-12-29 14:11:08 +08:00 1
选择默认输出的XML格式,返回的结果就是 string 呀.
|
2
reloop OP |
3
reloop OP @toothpaste
select * from html where url="" and xpath="" 我这样写后得到的是个 DOM 结构 如果是一整篇文章, YQL 是不是可以像 xpath fetch 那样得到格式化的结果呢 ? 今天发现 charset 可以解决我的一些 feed 的乱码 问题 , 所以我想是不是也有什么东西可以让 YQL 模块输出格式化的内容 E文不好 , 在官方文档转了好几圈都没找到答案 |
4
toothpaste 2012-12-29 16:12:55 +08:00 1
select * from html where url="http://lifehacker.com/" and xpath="//*[contains(@class, 'splashposts')]"
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Flifehacker.com%2F%22%20and%20xpath%3D%22%2F%2F*[contains%28%40class%2C%20%27splashposts%27%29]%22&diagnostics=true 它返回的xml,在result 节点就是HTML呀. 不知道我有没有理解你的需求. |
5
reloop OP @toothpaste
恩 , 要怎么提取出这个 results 的内容 , 以 HTML 输出 ? 比如我把这部分直接做为 item.description 的 HTML 代码 , 或者使用 string build 再进一步格式化 ? |
6
toothpaste 2012-12-30 07:07:11 +08:00 1
明白你的意思了,是要把YQL 用在Yahoo Pipes 里面是吧, 我以为你是直接想把YQL结果嵌在网页里.
这个问题我以前没遇到过, 搜索了一下,在SO 上有个方案: stackoverflow.com/questions/2567833 改了一下上面的例子,请看下面这个效果: use "http://www.datatables.org/data/htmlstring.xml" as html.tostring; select * from html.tostring where url="http://lifehacker.com/" and xpath="//*[contains(@class, 'splashposts')]" |
7
reloop OP @toothpaste
谢谢! 这个 html.tostring 跟 xpath fetch page 一样了 但是 , 当时使用 YQL 模块代替 xpath fetch page 模块是因为 YQL 可以像这样 select * from html where url="" and charset="" 来解决一些网页的乱码问题 现在 html.tostring 虽然可以按HTML格式化输出了 但是只能使用 url 和 xpath 两个参数啊 不支持 charset 因为我不知道怎么自己写数据表 就用你给的 http://www.datatables.org/data/htmlstring.xml 自己建了个数据表 简单加了条 <key id="charset" type="xs:string" paramType="variable" required="false" /> 现在使用 charset 不会再输出 null 了 但还是乱码 我猜那个 html.tostring 里面的这段代码可能需要改 但实在看不懂 , 我可能又得滚去看很多不懂的东西了 如果你会改的话 能帮我写个支持charset 的 html.tostring 让我先用上么 ? 谢谢 !! var results = y.rest(url).accept('text/html').get().response; if (xpath) results = y.xpath(results, xpath); response.object = results.toXMLString(); |
8
toothpaste 2012-12-30 19:26:20 +08:00 2
按照YQL的文档, http://developer.yahoo.com/yql/guide/yql-javascript-objects.html#yql-execute-restobject
它提供两个关于charset的方法, fallbackCharset(charset_list) 和 forceCharset(charset_list) 所以table改成这样: var results = y.rest(url).forceCharset(charset).accept('text/html').get().response; if (xpath) results = y.xpath(results, xpath); response.object = results.toXMLString(); 由于不知道你要处理的网址,我用 tianqi.cncn.com 试了一下 (话说现在找个不是utf-8的也挺不容易的) charset="utf-8" 时为乱码 而 charset="gb2312" 则可以正常显示, 说明这个改动是有作用的. use "http://.../htmlstring.xml" as html.tostring; select * from html.tostring where url="http://tianqi.cncn.com/" and charset="gb2312" |
9
reloop OP @toothpaste 问题解决了 , 多谢啊 , 做了好久无聊的测试... 哈哈 .. 非常感谢 !!!
|
10
reloop OP @toothpaste 再谢一下 !!
|
11
toothpaste 2012-12-31 06:26:15 +08:00
@reloop 呵呵, 不客气,我也学到了东西.
|
12
woyer 2013-12-06 13:57:35 +08:00
最后一步怎么改table不太清楚,特定注册了个账号,又找不到楼主联系方式,冒昧来打扰下,希望得到回应。
|
14
woyer 2013-12-06 17:25:19 +08:00
@reloop 感谢回应,具体就是我不太清楚这个代码该贴哪儿,
直接用这个,我测试了可以 use "http://www.datatables.org/data/htmlstring.xml" as html.tostring; 但看你们的回复,貌似是要新建个什么东西 |
15
reloop OP @woyer
直接用 use "http://www.datatables.org/data/htmlstring.xml" as html.tostring; 是可以格式化为 HTML 然后我遇到乱码 所以需要 既格式化为 HTML 而且支持指定编码如 GB2312 一共修改两个地方 1. 在 inputs 里加上一个 key <inputs> <key id="charset" type="xs:string" paramType="variable" required="false" /> </inputs> 2. 是把代码贴到 <execute><![CDATA[ 这里 ]]></execute> |
16
woyer 2013-12-06 18:25:33 +08:00
还是不太明吧,这个添加地方,是需要在YQL console里面新建一个table,再把您说的这些加上去么?
我也是到了可以格式化为HTML,但显示中文乱码的问题。 不好意思啊,确实对这块不是太熟,请有空再指点下。 |
17
woyer 2013-12-06 21:09:23 +08:00
做出来了自己研究了下,做成功了,再次感谢啊,您的思路启发了我。
|