Example #1
0
    def parse_result(r):
        data = r['data']
        p = get_nested_value(data, 6, 84, 7, 1)
        time_zone = get_nested_value(data, 31, 1, 0, 0)
        timestamp = moment.utcnow().timezone(time_zone).replace(minutes=0,
                                                                seconds=0)

        return dict(id=r['id'],
                    data=dict(popularity=p, timestamp=str(timestamp)))
Example #2
0
    def parse_result(r):
        data = r['data']
        lat = round(get_nested_value(data, 9, 2),
                    7)  # 7 digits equals a precision of 1 cm
        lng = round(get_nested_value(data, 9, 3),
                    7)  # 7 digits equals a precision of 1 cm
        # noinspection PyUnresolvedReferences
        h3_index = h3.geo_to_h3(lat, lng, POI_RESOLUTION)
        pb_id = get_nested_value(data, 10)

        return dict(query=r['query'],
                    data=dict(location=dict(lat=lat, lng=lng),
                              h3Index=h3_index,
                              id=pb_id))
Example #3
0
def search(query):
    """
    Get the data for a given query string
    :param str query: String that is used for the search (name + address or place_id:{place_ide})
    :return: The query string with its corresponding result
    """

    url = 'https://www.google.de/search'
    params = {
        'tbm':
        'map',
        'tch':
        1,
        'hl':
        'en',
        'q':
        query,
        'pb':
        '!4m12!1m3!1d4005.9771522653964!2d-122.42072974863942!3d37.8077459796541!2m3!1f0!2f0!3f0!3m2!1i1125!2i976'
        '!4f13.1!7i20!10b1!12m6!2m3!5m1!6e2!20e3!10b1!16b1!19m3!2m2!1i392!2i106!20m61!2m2!1i203!2i100!3m2!2i4!5b1'
        '!6m6!1m2!1i86!2i86!1m2!1i408!2i200!7m46!1m3!1e1!2b0!3e3!1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e3!2b0!3e3!'
        '1m3!1e4!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e3!2b1!3e2!1m3!1e9!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e'
        '10!2b0!3e4!2b1!4b1!9b0!22m6!1sa9fVWea_MsX8adX8j8AE%3A1!2zMWk6Mix0OjExODg3LGU6MSxwOmE5ZlZXZWFfTXNYOGFkWDh'
        'qOEFFOjE!7e81!12e3!17sa9fVWea_MsX8adX8j8AE%3A564!18e15!24m15!2b1!5m4!2b1!3b1!5b1!6b1!10m1!8e3!17b1!24b1!'
        '25b1!26b1!30m1!2b1!36b1!26m3!2m2!1i80!2i92!30m28!1m6!1m2!1i0!2i0!2m2!1i458!2i976!1m6!1m2!1i1075!2i0!2m2!'
        '1i1125!2i976!1m6!1m2!1i0!2i0!2m2!1i1125!2i20!1m6!1m2!1i0!2i956!2m2!1i1125!2i976!37m1!1e81!42b1!47m0!49m1'
        '!3b1'
    }
    response = fetch_data(url, params)
    data = response.text.split('/*""*/')[0]
    jend = data.rfind('}')

    if jend >= 0:
        data = data[:jend + 1]

    jdata = json.loads(data)['d']
    jdata = json.loads(jdata[4:])

    # Get info from result array, has to be adapted if api changes
    data = get_nested_value(jdata, 0, 1, 0, 14)

    # Check second result
    if data is None:
        data = get_nested_value(jdata, 0, 1, 1, 14)

    return dict(query=query, data=data)
Example #4
0
    def parse_list(li):
        date = get_nested_value(li, 4)
        opening_time_hours = get_nested_value(li, 6, 0, 0)
        opening_time_minutes = get_nested_value(li, 6, 0, 1)
        closing_time_hours = get_nested_value(li, 6, 0, 2)
        closing_time_minutes = get_nested_value(li, 6, 0, 3)

        return dict(
            date=str(moment.date(date)),
            openingTime=str(moment.date(date).add(
                hours=opening_time_hours,
                minutes=opening_time_minutes
            )) if opening_time_hours is not None else None,
            closingTime=str(moment.date(date).add(
                days=1 if closing_time_hours < opening_time_hours else 0,  # Necessary if closing at midnight or later
                hours=closing_time_hours,
                minutes=closing_time_minutes
            )) if closing_time_hours is not None else None
        )
Example #5
0
    def parse_result(r):
        data = r['data'][6]
        name = get_nested_value(data, 11)
        place_id = get_nested_value(data, 78)
        lat = round(get_nested_value(data, 9, 2), 7)  # 7 digits equals a precision of 1 cm
        lng = round(get_nested_value(data, 9, 3), 7)  # 7 digits equals a precision of 1 cm
        # noinspection PyUnresolvedReferences
        h3_index = h3.geo_to_h3(lat, lng, POI_RESOLUTION)
        address = get_nested_value(data, 2)
        timezone = get_nested_value(data, 30)
        categories = [t[0] for t in (get_nested_value(data, 76) or [])]
        opening_hours = parse_opening_hours(get_nested_value(data, 34, 1))
        permanently_closed = get_nested_value(data, 88, 0) == 'CLOSED'
        temporarily_closed = get_nested_value(data, 96, 5, 0, 2) == 'Reopen this place' and not permanently_closed
        inside_of = get_nested_value(data, 93, 0, 0, 0, 1)
        phone = get_nested_value(data, 178, 0, 3)
        website = get_nested_value(data, 7, 0)
        rating_stars = get_nested_value(data, 4, 7)
        rating_number_of_reviews = get_nested_value(data, 4, 8)
        price_level = get_nested_value(data, 4, 2)
        popularity_data = get_nested_value(data, 84, 0)
        spending_time = parse_spending_time_data(get_nested_value(data, 117, 0))
        popularity, waiting_time = None, None

        if popularity_data:
            popularity, waiting_time = parse_popularity_data(popularity_data, timezone)

        return dict(
            id=r['id'],
            data=dict(
                name=name,
                placeID=place_id,
                location=dict(lat=lat, lng=lng),
                h3Index=h3_index,
                address=address,
                timezone=timezone,
                categories=categories,
                temporarilyClosed=temporarily_closed,
                permanentlyClosed=permanently_closed,
                insideOf=inside_of,
                contact=dict(phone=phone, website=website),
                openingHours=opening_hours,
                rating=dict(stars=rating_stars, numberOfReviews=rating_number_of_reviews),
                priceLevel=len(price_level) if price_level else None,
                popularity=popularity,
                waitingTime=waiting_time,
                spendingTime=spending_time
            )
        )