首页 > 解决方案 > 如何按餐厅评级对餐厅名称列表进行排序(可能来自 Google Places 或 Yelp Fusion API)

问题描述

我有一个包含数千个餐厅名称和地址的 csv 文件,我需要按评级(不在 csv 中的数据)对其进行排序。有没有办法用这些数据填充 csv?可能使用 Google Places API 或 Yelp Fusion API?

标签: csvsortinggoogle-places-apiyelp-fusion-api

解决方案


如果您使用商家名称和地址进行查询,Google Places API 和 Yelp Fusion API 都可以让您获得餐厅的评级。我将解释如何做到这一点,但首先要注意合规性。您所描述的内容显然违反了这两个 API 的服务条款。唯一允许使用他们的数据是在公开的网站或应用程序上显示它。将其获取并保留在 csv 文件中显然是不合适的。这些 API 旨在为您的用户实时查询和立即显示结果。

Google 要求地方数据与 Google 地图或经批准的“由 Google 提供支持”的图像一起显示。此外,不允许“预取、缓存或存储内容”。有关详细信息,请参阅https://developers.google.com/places/web-service/policies

Yelp 需要署名,基本上要求您显示星级和 Yelp 徽标,并带有指向您查询的餐厅的 Yelp 业务页面的链接。请参阅https://www.yelp.com/developers/display_requirements此外,您不能“缓存、记录、预取或以其他方式存储 Yelp 内容的任何部分超过二十四 (24) 小时从收到 Yelp 内容开始,或尝试或提供一种方法来执行任何抓取或“批量下载”操作。” 有关全文和术语,请参阅https://www.yelp.com/developers/api_terms

在不涉及法律术语的情况下,以下是向 Google 地方信息请求餐厅评级的方法:

https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=Applebees,234 W 42nd St,New York,NY&inputtype=textquery&fields=formatted_address,name,rating&key=YOUR_API_KEY

并且,JSON 响应:

{
    "candidates": [
        {
            "formatted_address": "234 W 42nd St, New York, NY 10036, USA",
            "name": "Applebee's Grill + Bar",
            "rating": 3.6
        }
    ],
    "status": "OK"
}

这是对 Yelp Fusion 的相同要求。没有办法只要求评级。结果始终包含餐厅数据库中的所有内容:

https://api.yelp.com/v3/businesses/search?term=applebees&location=234 W 42nd St,New York,NY&limit=1

JSON响应:

{
    "businesses": [
        {
            "id": "gytFjzBw-z5LZD-6JSMChg",
            "alias": "applebees-grill-bar-new-york-3",
            "name": "Applebee's Grill + Bar",
            "image_url": "https://s3-media1.fl.yelpcdn.com/bphoto/CLizyj9S7pMvwGNm2dgdiQ/o.jpg",
            "is_closed": false,
            "url": "https://www.yelp.com/biz/applebees-grill-bar-new-york-3?adjust_creative=pnOv3Zj2REsNDMU4Z3-SLg&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_search&utm_source=pnOv3Zj2REsNDMU4Z3-SLg",
            "review_count": 444,
            "categories": [
                {
                    "alias": "tradamerican",
                    "title": "American (Traditional)"
                },
                {
                    "alias": "burgers",
                    "title": "Burgers"
                },
                {
                    "alias": "sportsbars",
                    "title": "Sports Bars"
                }
            ],
            "rating": 2,
            "coordinates": {
                "latitude": 40.756442,
                "longitude": -73.988838
            },
            "transactions": [
                "delivery",
                "pickup"
            ],
            "price": "$$",
            "location": {
                "address1": "234 W 42nd St",
                "address2": "",
                "address3": "",
                "city": "New York",
                "zip_code": "10036",
                "country": "US",
                "state": "NY",
                "display_address": [
                    "234 W 42nd St",
                    "New York, NY 10036"
                ]
            },
            "phone": "+12123917414",
            "display_phone": "(212) 391-7414",
            "distance": 5.938732504864397
        }
    ],
    "total": 2900,
    "region": {
        "center": {
            "longitude": -73.98880004882812,
            "latitude": 40.75648701137637
        }
    }
}

推荐阅读