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 · 6761 次点击
    这是一个创建于 2561 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    GooMS
        6
    GooMS  
       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   ·   实用小工具   ·   982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:52 · PVG 04:52 · LAX 12:52 · JFK 15:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.