Comments (8)
目前我的设想:
class MovieList(Item):
__base_url = 'http://www.dy2018.com
url = XPath('//b//a[@class="ulink"]/@href')
title = XPath('//b//a[@class="ulink"]/text()')
class Meta:
source = XPath('//table[@class="tbspan"]')
route = '/html/gndy/dyzz/index_:page.html'
alias = '/movies/?page=:page'
class Movie(Item):
__base_url = 'http://www.dy2018.com'
download = XPath('//*[@id="Zoom"]/table[1]//a/text()')
class Meta:
source = None
alias = '/movies/:id'
route = '/i/:id.html'
class Post(Item):
__base_url = 'https://news.ycombinator.com'
url = XPath('//a[@class="storylink"][1]/@href')
title = XPath('//a[@class="storylink"][1]/text()')
class Meta:
source = XPath('//tr[@class="athing"]')
route = '/news/?p=:page'
alias = '/posts/?page=:page'
对外只暴露alias定义的路径, route只作为源站路径. 上面的例子暴露
/movies/?page=:page
/movies/:id
/posts/?page=:page
路径的定义按照flask route的语法. 这样不但隐藏了源站, 还使得暴露的API接口遵循RESTful风格, 当然, 开发者可以使用任何喜欢的风格.
你觉得这样解决如何?
from toapi.
bravo!
一举两得,而且可以更加 RESTful,同时改进源站的路由写法,不用写正则去匹配特殊情况
另外提一点,源站路由用正则可以匹配多种规则的路由,如 route = '[/search/?q=.+|/page/?p=\d+]'
可以在一个 item 中匹配路由 /search
和 /page
,如果上面提到的参照 flask route 的源站路由写法能实现,请考虑到这种情况 @gaojiuli
from toapi.
想到一种更好的解决方案: #77
from toapi.
今天尝试写实例的时候就遇到这个需求,分别有如下item:
- page 获取next_page
- post 获取page中的所有条目
- search 获取搜索结果
完成上述page和post两个item的编写之后,我在编写对应站点的搜索(search)时发现,搜索结果页的内容和page的是一样的,这样我其实可以直接用page和post而不是重新写一个search item,然后在这个item里写我要获取的page和post,而直接使用page和post的前提就是多路由匹配。
不知道这样描述能不能说清楚问题的关键。
from toapi.
明白你的意思。
我那个issue提出的方案应该能兼容你的这个情况。你有什么更好的建议或者更进一步建议么?
from toapi.
@ruter 你完全可以自定义一个search的路由到post和page ,但这个issue #77 是可以简化操作的,你的search/ 可以关联到page这个item
from toapi.
抱歉刚看到前面新开的issue, #77 里的方案确实可以解决我所提出的问题。
另外说一种方案,仅供参考,这是框架 Odoo 中使用的多路由方案:
只有一个路由的时候是直接写路由路径 @http.route('/resource/path/<param>', ...)
,多路由的时候是以一个 list
的方式 @http.route(['/resource/foo/<param>', '/resource/bar/<param>'], ...)
这个 issue 应该可以关闭了 👍
from toapi.
他的多路由不存在映射的问题,我们需要映射。
from toapi.
Related Issues (20)
- 关于post数据的获取和item是编写 HOT 6
- Add force-refresh on api HOT 1
- 使用toapi run 时出现问题 HOT 1
- 过滤删除无用的item
- Cache TTL clarification HOT 5
- Access to RawHTML from selectors HOT 2
- Production Deployment Instructions HOT 3
- python2.7安装报错 HOT 2
- How to set expiration on Local Storage
- toapi is easy toStar hard todevelope HOT 1
- Error: No such command "new". HOT 2
- ImportError: cannot import name 'XPath' HOT 2
- Flask logging error HOT 2
- SyntaxError: invalid syntax HOT 1
- modify routing argument 2
- Elements not always present on page
- Is this projects still active ?
- Problem: can't start the app
- Fix simple typo: programe -> program
- Your Documentation is unable to access HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from toapi.