Toapi 正式发布 - 再也不愁没有数据! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
prasanta
V2EX    Python

Toapi 正式发布 - 再也不愁没有数据!

  •  4
     
  •   prasanta 2017-12-26 17:26:38 +08:00 7237 次点击
    这是一个创建于 2917 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Toapi - 再也不愁没有数据!

    Github: https://github.com/gaojiuli/toapi

    进入 Toapi

    你是否有这样的需求,有一个很好的 idea,却没有很好的数据来源,好不容易找到相关数据来源的网站,却发现没有 API (或许有但需要收费),那么,我可以告诉你,Toapi 为此提供了很好的解决方案 ,它可以:

    它的最后效果

    // http://127.0.0.1:5000/pic/?q=coffee { "Pixabay": [ { "img": "https://cdn.pixabay.com/photo/2017/06/21/05/28/coffee-2426110__340.png" }, { "img": "/static/img/blank.gif" } ], "Pexels": [ { "img": "https://images.pexels.com/photos/302899/pexels-photo-302899.jpeg?h=350&auto=compress&cs=tinysrgb" }, { "img": "https://images.pexels.com/photos/34085/pexels-photo.jpg?h=350&auto=compress&cs=tinysrgb" } ] } 
    • 短暂的开发周期:很少量代码就可以将某个网站构建成你自己的 API 服务
    • 稳健的服务支持:你只需快速地构建以及使用,其它方面就安心地交给Toapi
      • 自动对数据缓存,提供MemoryCache RedisCache MemcachedCache三种缓存方案
      • html 源文件本地持久化,提供本地以及数据库支持
      • 增量更新
      • 自定义路由
      • 自定义多站组合 API
    • 多样的模板选择:每一个Toapi 服务都可以被其它使用者安装,或许你无需编写代码,就可以安装其它服务,随即组合成自己的服务,官方维护了一个模板列表 - awesome-toapi

    Toapi 是一个用Python编写的开源项目,若你有特殊的功能需求,可以自己定制,我们为你提供完整的生态:

    使用 Toapi

    让我们看下面这个简单的例子 - 仅仅是演示 目标网站是hackernews

    from toapi import XPath, Item, Api, Settings class MySettings(Settings): web = { "with_ajax": True, "request_config": {}, "headers": None } api = Api('https://news.ycombinator.com', settings=MySettings) class Post(Item): url = XPath('//a[@class="storylink"]/@href') title = XPath('//a[@class="storylink"]/text()') class Meta: source = XPath('//tr[@class="athing"]') route = {'/news?p=:page': '/news?p=:page'} class Page(Item): next_page = XPath('//a[@class="morelink"]/@href') class Meta: source = None route = {'/news?p=:page': '/news?p=:page'} def clean_next_page(self, next_page): return "http://127.0.0.1:5000/" + next_page api.register(Page) api.register(Post) api.serve() # Visit http://127.0.0.1:5000/news?p=1 

    不到四十行代码,你已经拥有了hackernews的 API 服务,介绍下目前官方提供的模板:

    最后

    Toapi 不会停止进步,从简陋的第一版到现在基本功能完善的版本,一个月来我们有近 400 次 commits,其中辛苦不必多说。

    我们诚恳地希望开发者们使用 Toapi 来构建服务,并提出你的宝贵意见,上手 Toapi 是一件极其简单的事情,我们希望看到 Toapi 能为开源社区带来一点贡献,能为你减少构建 API 的麻烦。

    Toapi 开发团队(@gaojiuli, @howie6879, @wuqiangroy)

    32 条回复    2017-12-28 00:43:55 +08:00
    wuqiangroy
        1
    wuqiangroy  
       2017-12-26 17:31:35 +08:00
    自顶一下,可以说是非常好用了。
    cls1991
        2
    cls1991  
       2017-12-26 17:35:59 +08:00
    prasanta
        3
    prasanta  
    OP
       2017-12-26 17:45:06 +08:00
    @cls1991 性质一样么?
    xiaozizayang
        4
    xiaozizayang  
       2017-12-26 17:49:31 +08:00
    将网站转化为一个 api 服务
    ruter8
        5
    ruter8  
       2017-12-26 17:57:33 +08:00   2
    实际使用过用来开发了一个下厨房的 API,开发效率极高,趁正式版发布把自己用 toapi 写的项目也完善了一下

    传送门: https://github.com/ruter/xiachufang-api
    3IOhG7M0knRu5UlC
        6
    3IOhG7M0knRu5UlC  
       2017-12-26 18:38:38 +08:00 via Android
    这个增量是体现在 API 上的
    Aether
        7
    Aether  
       2017-12-26 18:43:01 +08:00
    这个服务是完全跑在本地的吗?
    ctsed
        8
    ctsed  
       2017-12-26 18:49:39 +08:00
    需要登录,或者 post 操作呢
    prasanta
        9
    prasanta  
    OP
       2017-12-26 19:00:41 +08:00 via Android
    @ctsed 自定义路由即可,app 基于 flask
    fe619742721
        10
    fe619742721  
       2017-12-26 19:00:46 +08:00
    看看,感觉挺好玩的
    prasanta
        11
    prasanta  
    OP
       2017-12-26 19:03:37 +08:00 via Android
    @Aether 可以部署到任何地方
    kingcc
        12
    kingcc  
       2017-12-26 19:07:13 +08:00
    低成本的聚合 api,赞一下
    wujunze
        13
    wujunze  
       2017-12-26 19:17:54 +08:00
    顶 又可以愉快的开发小程序了
    GreatMartial
        14
    GreatMartial  
       2017-12-26 19:27:25 +08:00
    赞一个,学习一下
    prasanta
        15
    prasanta  
    OP
       2017-12-26 22:10:48 +08:00 via Android
    @wujunze 又有什么好点子
    wangkai123
        16
    wangkai123  
       2017-12-26 22:13:06 +08:00
    用过楼主的 django 脚手架,赞哈哈哈
    masterjason
        17
    masterjason  
       2017-12-26 22:42:39 +08:00
    想加入!从来没在 github 里加入过组织啊。selenium 和 flask 都会!楼主看我
    wzhndd2
        18
    wzhndd2  
       2017-12-27 00:09:43 +08:00
    数据有版权问题吗?
    prasanta
        19
    prasanta  
    OP
       2017-12-27 08:31:05 +08:00 via Android
    @wzhndd2 你自己通过框架获取的数据,并不是框架提供的
    beginor
        20
    beginor  
       2017-12-27 08:33:20 +08:00 via Android
    这个好,已经 star
    Ehco1996
        21
    Ehco1996  
       2017-12-27 08:34:08 +08:00 via iPhone
    这个真不错!
    qsnow6
        22
    qsnow6  
       2017-12-27 09:02:15 +08:00
    可以来个演示站
    omph
        23
    omph  
       2017-12-27 09:03:56 +08:00
    是个在线爬虫服务啊
    xzg1993
        24
    xzg1993  
       2017-12-27 09:10:37 +08:00
    不太懂其中的原理,很好奇,是可以把别人家的网站 转换成 api 接口吗?? 好神奇
    ruter8
        25
    ruter8  
       2017-12-27 09:28:12 +08:00
    @qsnow6 看 #5 我写的,可以自己克隆了跑一下


    @xzg1993 这个其实就相当于爬虫,把网页取下来,然后获取对应元素的内容
    mrcode
        26
    mrcode  
       2017-12-27 09:56:01 +08:00
    很好,先 star 一波,不过这种好像不能跑动态服务把。
    prasanta
        27
    prasanta  
    OP
       2017-12-27 10:20:01 +08:00 via Android
    @mrcode 可以跑,所有动态页面都能跑
    vimiix
        28
    vimiix  
       2017-12-27 10:48:32 +08:00
    mark
    tflz514
        29
    tflz514  
       2017-12-27 10:53:12 +08:00
    Kirikora
        30
    Kirikora  
       2017-12-27 15:06:20 +08:00   1
    已 star~ 不过感觉看文档还不是很明白用法,这帖子里看的还明了点。。 改天把官方模板看一下
    prasanta
        31
    prasanta  
    OP
       2017-12-27 15:17:06 +08:00 via Android
    @xzg1993 你的描述很准确
    vimiix
        32
    vimiix  
       2017-12-28 00:43:55 +08:00   1
    恭喜一天斩获 300+star,学习一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2502 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 10:44 PVG 18:44 LAX 02:44 JFK 05:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86