Ejemplo n.º 1
0
def search(name):
    f = Factual(FACTUAL_KEY, FACTUAL_SECRET)
    table = f.table('restaurants-us')

    result = table.search(name)
    #print result.data()[0]
    return result.data()[0]
Ejemplo n.º 2
0
def push_product(org_id, ean_13, quantity):
    fb = firebase.FirebaseApplication(
        'https://feedthechildren.firebaseio.com/', None)
    exists = fb.get("/inventory/" + org_id,
                    None,
                    params={'print': 'pretty'},
                    headers={'X_FANCY_HEADER': 'VERY FANCY'})
    if exists is not None and ean_13 in exists:
        result = fb.put('/inventory/' + org_id + '/' + ean_13,
                        'quantity',
                        str(int(exists[ean_13]['quantity']) + quantity),
                        params={'print': 'pretty'},
                        headers={'X_FANCY_HEADER': 'VERY FANCY'})
        return str(result)
    factual = Factual('pFMeueZJQpyZnSPILemUPxzNJmathJyrxoqOnow0',
                      'ROHZOgzy9GwJGb9egKpzAVTYZq35iuj6f3Uu4rNu')
    nutrition = factual.table('products-cpg-nutrition').search(ean_13)
    result = fb.put('/inventory/' + org_id,
                    ean_13, {
                        'quantity': str(quantity),
                        'metadata': nutrition.data()[0],
                        'reserved': str(0)
                    },
                    params={'print': 'pretty'},
                    headers={'X_FANCY_HEADER': 'VERY FANCY'})
    return str(result)
Ejemplo n.º 3
0
def searchZip(name, zipcode):
    f = Factual(FACTUAL_KEY, FACTUAL_SECRET)
    table = f.table('restaurants-us')

    filters = table.filters({'postcode': zipcode}).limit(1)
    result = filters.search(name)
    #print result.data()[0]
    return result.data()[0]
Ejemplo n.º 4
0
def GetBizNearAddress(category_id, address, radius_meters, offset, n):
    factual = Factual('YK4fO9P1qZFZy4Cu7HDNkeZd9YEN1ut4tyO426OR',
                      '9G1L9zUop7kwMmNkM7eIYsFNbvhINDl8hyxyZnKv')
    places = factual.table('places')
    # All with category_id
    rest = places.filters({"category_ids": {"$includes": category_id}})
    # Latitutde and Longitude of address
    lat, lng = GetLatLng(address)
    near = rest.geo(circle(lat, lng,
                           radius_meters)).offset(offset).limit(n).data()
    return near
Ejemplo n.º 5
0
def main():
    #print "---------------TEST OF FACTUAL API-----------------"
    f = Factual(FACTUAL_KEY, FACTUAL_SECRET)

    table = f.table('restaurants-us')

    q1 = table.search("Ichiro")
    print q1.data()[1]['name']
    #print q1.get_url()

    q2 = table.filters({'region': "NY"}).limit(1)
Ejemplo n.º 6
0
def main():
    factual = Factual(KEY, SECRET)
    
    table = factual.table('places')
    
    # q1 = table.search("sushi Santa Monica")
    # print q1.data()[1]
    # print q1.get_url()
    
    q2 = table.select("longitude,latitude,website").filters({'category_ids':{'$includes':218}, 'region': "WA", 'locality': "SEATTLE"}).limit(50)
    print q2.data()
Ejemplo n.º 7
0
def main():
    factual = Factual(KEY, SECRET)
    
    table = factual.table('places')
    
    q1 = table.search("sushi Santa Monica")
    print q1.data()[1]
    print q1.get_url()
    
    q2 = table.filters({'category_ids':{'$includes':338}, 'region': "CA"}).limit(1)
    print q2.data()
Ejemplo n.º 8
0
 def __init__(self, query, lat, lng, radius):
     factual = Factual(app.config['FACTUAL_KEY'],
                       app.config['FACTUAL_SECRET'])
     places = factual.table('places')
     # Searches for all restaurants
     if query.lower() == 'restaurants':
         self.data = places.filters({'category_ids':{'$includes_any':[312,338]}}).\
             geo(circle(lat, lng, radius)).limit(50).data()
     # Searches according to user's query
     else:
         self.data = places.search(query).geo(circle(
             lat, lng, radius)).limit(50).data()
Ejemplo n.º 9
0
def get_data():
    factual = Factual(KEY,SECRET)
    cn = Connection(MONGOURL)
    db = cn['factual']
    fields = "name,address,locality,region,postcode,country,category_labels,latitude,longitude"
    query = factual.table('places-v3').filters({"locality":"San Francisco"}).limit(50)
    try:
        for offset in xrange(0,10000,50):
            data = query.select(fields).offset(offset).data()
            inserted = db.places.insert(data)
            print "offset", offset, "inserted", len(inserted), "documents, sleeping for 60s"
            sleep(60)
    except APIException as e:
        print e
Ejemplo n.º 10
0
def main():
    factual = Factual(KEY, SECRET)

    table = factual.table('places')

    q1 = table.search("sushi Santa Monica")
    print q1.data()[1]
    print q1.get_url()

    q2 = table.filters({
        'category': "Food & Beverage",
        'region': "CA"
    }).limit(1)
    print q2.data()
Ejemplo n.º 11
0
def get_reservations_for_user(user_id):
    fb = firebase.FirebaseApplication(
        'https://feedthechildren.firebaseio.com/', None)
    factual = Factual('pFMeueZJQpyZnSPILemUPxzNJmathJyrxoqOnow0',
                      'ROHZOgzy9GwJGb9egKpzAVTYZq35iuj6f3Uu4rNu')
    exists = fb.get("/reservations/" + user_id,
                    None,
                    params={'print': 'pretty'},
                    headers={'X_FANCY_HEADER': 'VERY FANCY'})
    if exists is not None:
        for org in exists:
            for ean in exists[org]:
                quantity = exists[org][ean]
                nutrition = factual.table('products-cpg-nutrition').search(ean)
                resp = nutrition.data()[0]
                exists[org][ean] = {'quantity': quantity, 'metadata': resp}
        return jsonify(exists)
    return ""
Ejemplo n.º 12
0
def task2(location, meal_of_the_day):
    """
    :param location: location around which the restaurants are looked up
    :param meal_of_the_day: the meal of the day, i.e., lunch, dinner, breakfast etc.
    :return: json body with 5 restaurants that meet the criteria
    # we can take many approaches to match the restaurants:
    # 1. We can take a attributes based approach, i.e., likes, dislikes, requirements of all individuals
    # 2. We can take an individual based approach, i.e., each person's likes, dislikes, and requirements at a time
    # 3. Possibly combine the weighted score of the first two approaches
    I am demonstrating a hybrid approach where the personal likes are checked for three people
    """
    factual = Factual(key=key, secret=secret)
    individuals = request.get_json()

    # get the nearest location
    nearest_location = find_smart_location(factual, location)

    if 'Error' in nearest_location:
        return Response(json.dumps({
            'Error':
            'No location of that name or postcode found. '
            'Please check the location or postcode name and try again.'
        }),
                        mimetype='application/json'), 400

    # initiate query with geo location search
    query = form_geo_query(factual,
                           lat=nearest_location['latitude'],
                           lon=nearest_location['longitude'])

    try:
        data = get_restaurants(individuals, meal_of_the_day, query)
    except:
        return Response(json.dumps({
            'Error':
            'An error occurred. Please try using one of breakfast, lunch, or dinner'
        }),
                        mimetype='application/json')
    if len(data) > 4:  # if at least 5 results are found, return
        return Response(json.dumps(data), mimetype='application/json')

    return Response(json.dumps(
        {'Error': 'No matching restaurant found. Please try again.'}),
                    mimetype='application/json'), 400
Ejemplo n.º 13
0
def task1(location, search_string):
    """
    :param location: location around which the restaurants are required
    :param search_string: keyword searched, e.g., coffee, thai, indian
    :return: 5 restaurants or cafes ordered by distance from the place

    If the location returns multiple results, the location closest to the ip of the search device is used.
    If a unique location can't be found in such a situation, a regions based results can be returned.
    """
    factual = Factual(key=key, secret=secret)

    # get the nearest location
    nearest_location = find_smart_location(factual, location)

    if 'Error' in nearest_location:
        return Response(json.dumps({
            'Error':
            'No location of that name or postcode found. '
            'Please check the location or postcode name and try again.'
        }),
                        mimetype='application/json'), 400

    # form the initial query based on geo location
    query = form_geo_query(factual,
                           lat=nearest_location['latitude'],
                           lon=nearest_location['longitude'])
    # add the filters
    query = query.search('{}'.format(search_string)).filters(
        {"category_ids": {
            "$includes": 338
        }})
    data = query.data()

    if len(data):
        return Response(json.dumps(data), mimetype='application/json')
    else:
        return Response(json.dumps({
            'Error':
            'The search returned no match. Please change the location or search string and try again.'
        }),
                        mimetype='application/json'), 400
Ejemplo n.º 14
0
def get_product(upc_code):
    factual = Factual("gCKclwfy6eBki5UyHDxS56x7zmcvCMaGJ7l7v9cM",
                      "Dt8V4ngb484Blmyaw5G9SxbycgpOsJL0ENckwxX0")
    products = factual.table('products')
    data = products.filters({'upc': {'$includes': upc_code}}).data()
    if data:
        upc_data = data[0]
        wanted = ['size', 'product_name', 'brand', 'image_urls']
        new = {}
        for pair in upc_data.items():
            if pair[0] in wanted:
                if pair[0] == 'product_name':
                    new['name'] = pair[1]
                elif pair[0] == 'size':
                    new['size'] = float(
                        re.search(r'[\d\.]+', pair[1][0]).group())
                elif pair[0] == 'image_urls':
                    new['pic'] = pair[1][0]
                else:
                    new[pair[0]] = pair[1]
        new_json = json.dumps(new)
        return new_json, new['pic']
    else:
        return None, None
Ejemplo n.º 15
0
from geopy.geocoders import Nominatim
import decimal
from factual import Factual
from factual.utils import circle
import json
from datetime import date
import calendar
import datetime

my_date = date.today()
my_day = calendar.day_name[my_date.weekday()]
my_day = my_day.lower()
factual = Factual('OAwHffzwwkan9LpstDBhOGOGmit7plcERqZpvE2J',
                  'gw28zCrtijknGrGDm9dVzC1v8HyFHi0HbEtGacL7',
                  timeout=10.0)
s = factual.table('places').schema()
places = factual.table('places')
a = raw_input("Location A: ")
b = raw_input("Location B: ")
c = raw_input("What are you looking for: ")


#d = raw_input("Proximity from the midpoint (mtrs): ")
def findMidPlace(a, b, c, d):
    geolocator = Nominatim()
    locationA = geolocator.geocode(a)
    locationB = geolocator.geocode(b)
    midpointLat = (locationA.latitude + locationB.latitude) / 2
    print midpointLat
    midpointLong = (locationA.longitude + locationB.longitude) / 2
    print midpointLong
Ejemplo n.º 16
0
from factual import Factual
from django.utils.encoding import smart_str
import pandas as pd
import string
import json

# set up api
factual = Factual('HShWyOdPbw6OdXNEvR1ZR4px2RbGC95xvKbpgUTV',
                  'xN2HcgnG6nueorqRw584jHUSf3SIg5BJriFoNyc5')

# UK postalcodes
postalcodes = pd.read_csv('/Users/artsy/Desktop/factual/UK/UK_codes.csv')
postalcodes = postalcodes['Postalcode'][0:]

# country codes
countries = {
    'United States': 'places-us',
    'China': 'places-cn',
    'Japan': 'places-jp',
    'Germany': 'places-de',
    'Italy': 'places-it',
    'France': 'places-fr',
    'Spain': 'places-es',
    'United Kingdom': 'places-gb',
    'Brazil': 'places-br',
    'Canada': 'places-ca',
    'Australia': 'places-au',
    'South Korea': 'places-kr',
    'Portugal': 'places-pt',
    'Taiwan': 'places-tw',
    'Switzerland': 'places-ch',
Ejemplo n.º 17
0
import io
import json

from factual import Factual

from yelp.client import Client
from yelp.oauth1_authenticator import Oauth1Authenticator

with io.open('keys.local.json') as cred:
    creds = json.load(cred)
    yelpCreds = creds["yelp"]
    auth = Oauth1Authenticator(**yelpCreds)
    yelpClient = Client(auth)
    factualCreds = creds["factual"]
    factualClient = Factual(factualCreds["key"], factualCreds["secret"])
    googleapikey = creds["googleapikey"]

Ejemplo n.º 18
0
from factual import Factual
factual = Factual('pFMeueZJQpyZnSPILemUPxzNJmathJyrxoqOnow0',
                  'ROHZOgzy9GwJGb9egKpzAVTYZq35iuj6f3Uu4rNu')
nutrition = factual.table('products-cpg-nutrition').search('0024100101481')
print nutrition.data()

nutrition = factual.table('products-cpg-nutrition')
Ejemplo n.º 19
0
def main():
    """ Update a CartoDB account/table with social media urls retrieved via factual_id column """
    parser = argparse.ArgumentParser(
        description='Load social media urls via Factual API for ' +
        'each museum with a factual id')
    parser.add_argument('--limit',
                        type=int,
                        default=10,
                        help='Limit the number of records to ' +
                        'update at once')
    parser.add_argument('--offset',
                        type=int,
                        default=None,
                        help='Offset the first record to ' + 'update')
    args = parser.parse_args()
    limit = args.limit
    offset = args.offset

    # Suppress urllib3 InsecurePlatformWarnings
    requests.packages.urllib3.disable_warnings()

    with file('config.yaml', 'r') as f:
        config = yaml.load(f)

    api = Factual(config['FACTUAL_ACCESS_KEY'], config['FACTUAL_SECRET_KEY'])

    query = """SELECT cartodb_id, mid, factual_id
               FROM {cartodb_table}
               WHERE factual_id is not null AND
                     factual_id <> '' AND
                     factual_id <> ' '
               ORDER BY cartodb_id""".format(
        cartodb_table=config['CARTODB_TABLE'])
    if limit is not None:
        query += ' LIMIT {0}'.format(limit)
    if offset is not None:
        query += ' OFFSET {0}'.format(offset)

    url = SQL_API_URL.format(cartodb_account=config['CARTODB_ACCOUNT'],
                             key=config['CARTODB_API_KEY'],
                             query=query)
    response = requests.get(url)
    rows = response.json()['rows']
    total_rows = len(rows)

    imports = 0

    try:
        for row in rows:
            social_urls = get_social_urls(api, row['factual_id'])

            update_template = "{column} = '{value}'"
            update = ', '.join([
                update_template.format(column=SOCIAL_COLUMNS[key],
                                       value=value.replace("'", "''"))
                for key, value in social_urls.iteritems()
            ])
            query = """UPDATE {cartodb_table}
                       SET {update}
                       WHERE mid = '{mid}'""".format(
                cartodb_table=config['CARTODB_TABLE'],
                update=update,
                mid=row['mid'])
            request_url = SQL_API_URL.format(
                cartodb_account=config['CARTODB_ACCOUNT'],
                key=config['CARTODB_API_KEY'],
                query=query)
            response = requests.get(request_url)
            if response.status_code == 200:
                imports = imports + 1
            else:
                print "ERROR {mid}: {error}".format(
                    mid=row['mid'], error=response.json()['error'])

            if imports % 100 == 0:
                print "Imported {imports}/{total}".format(imports=imports,
                                                          total=total_rows)

    except Exception as e:
        print "EXCEPTION: imports = {}".format(imports)
        raise e

    print "Imported {imports}/{total}".format(imports=imports,
                                              total=total_rows)
Ejemplo n.º 20
0
import csv

pp = pprint.PrettyPrinter(indent=2)

factual_ids = []
with open('factual_to_naics2012.tsv', 'r') as csvfile:
    factual_id_reader = csv.DictReader(csvfile, delimiter='\t')
    for row in factual_id_reader:
        factual_ids.append({
            'factual_id': int(row['factual_id']),
            'factual_name': row['factual_description']
        })

print factual_ids

factual_service = Factual('key', 'secret')

q = factual_service.table('places')

output_file = open('factual_counts.csv', 'w')

writer = csv.writer(output_file)

for fact_key in factual_ids:
    filter_query = q.filters({
        "$and": [{
            "category_ids": {
                '$includes': fact_key['factual_id']
            }
        }, {
            "region": "ma"
Ejemplo n.º 21
0
from factual import Factual
from factual_api_keys import KEY, SECRET
factual = Factual(KEY, SECRET)

if __name__ == "__main__":
    limit = 50
    maximum = 500
    results = []
    query = factual.table("restaurants-us").filters({
        "$and": [{
            "region": "CA"
        }, {
            "locality": "berkeley"
        }]
    }).include_count(True).limit(str(limit)).offset("0").sort("address:asc")
    tot = query.total_row_count()
    curOffset = limit
    results = results + query.data()
    while (curOffset < min(tot, maximum)):
        query = factual.table("restaurants-us").filters({
            "$and": [{
                "region": "CA"
            }, {
                "locality": "berkeley"
            }]
        }).include_count(True).limit(str(limit)).offset(
            str(curOffset)).sort("address:asc")
        results = results + query.data()
        curOffset = curOffset + limit

    # this is to get the rest of the restaurants
Ejemplo n.º 22
0
 def __init__(self, key, secret):
     self.factual = Factual(key, secret)
Ejemplo n.º 23
0
 def __init__(self):
     factual_id, factual_secret = DATASOURCES['factual'][
         'app_id'], DATASOURCES['factual']['app_secret']
     places = Factual(factual_id, factual_secret)
     self.places = places.table('places')
Ejemplo n.º 24
0
import sys,json;
sys.path.append('C:\Python27\Lib\site-packages')

Rname=[]
hrateRes=[]
numbers=["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine","ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"]

from factual import Factual
factual = Factual('ke8x5LeW6GVnU1aPjTUvJS5Sr12YT2aTA9dDc18r', '4eDL2G2HlRm6ZOTkvxkj2xg86BRgOGUTVLoC5OsF')   #[email protected]
#factual = Factual('O7OPvoeCZbUC3Zsy5qld8zZIuZX99w0SKkT6APy8','V7eHUV01tJUyFqFcaLZrXN8cnIEGbUmdyE1ZO2KB')    #[email protected]

#print("Hello")
#places = factual.table('places')


cuisine="Wings"
postcode="90007"
rating=4   #possible values 1-5
price="expensive"    #possible values Cheap, moderate, Expensive
locality="Seattle"

if(price.lower()=="expensive"):
    price =5
elif(price.lower()=="cheap"):
    price =1

elif(price.lower()=="moderate"):
    price =3

Ejemplo n.º 25
0
import mykey
from factual import Factual  # compiled for python 3 from the forked rep: https://github.com/manonthemat/factual-python-driver

factual = Factual(mykey.OAuthKey, mykey.OAuthSecret)
acai = factual.table('products').search('acai').data()
for i, listitem in enumerate(acai):
    print('Product #' + str(i + 1))
    for k, v in listitem.items():
        if k == 'avg_price':
            print('Average price:', v)
        if k == 'product_name':
            print('Name:', v)
    print('*' * 20)
Ejemplo n.º 26
0
from factual import Factual
import pandas as pd
import os

# factual API credentials
factual = Factual(os.environ["FACTUAL_KEY"], os.environ["FACTUAL_SECRET"])
tbl = factual.table('products')

data = []
for cat in ["Pet Care", "Frozen Foods", "Hair Shampoo", "Soda"]:
    q = tbl.filters({"category": cat })
    for i in range(1, 15):
        q = q.page(2)
        data = data + q.data()

df = pd.DataFrame(data)
# df.to_csv("product_data.csv", index=False)
df[['product_name', 'category']].to_csv("./products.csv", index=False)
Ejemplo n.º 27
0
    instructions = wtf.TextAreaField('Instructions')


#####################################
# FACTUAL API ACCESS FOR ASSIGNMENT 4
#####################################

# load creds from client_secrets.json
secrets_file = open('client_secrets.json', 'r')
factual_creds = json.loads(secrets_file.read())
secrets_file.close()

api_key = factual_creds['api_key']
api_secret = factual_creds['api_secret']

factual = Factual(api_key, api_secret)


# route to hit Factual api
# based on Factual documentation: https://github.com/Factual/factual-python-driver
@app.route('/mobile/factual', methods=['POST'])
def factual_restaurants():
    latitude = float(request.form.get('latitude'))
    longitude = float(request.form.get('longitude'))
    search_term = request.form.get('search_term')
    if not latitude or not longitude:
        return json.dumps({"error": "No location provided"}), 500
    if not search_term:
        return json.dumps({"error": "No search term provided"}), 500

    radius = 1000
Ejemplo n.º 28
0
 def setUp(self):
     self.factual = Factual(KEY, SECRET)
     self.places = self.factual.table('places')
     self.facets = self.factual.facets('global')
import sys, json
sys.path.append('C:\Python27\Lib\site-packages')

Rname = []
hrateRes = []
numbers = [
    "zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
    "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
    "sixteen", "seventeen", "eighteen", "nineteen", "twenty"
]

from factual import Factual
#factual = Factual('ke8x5LeW6GVnU1aPjTUvJS5Sr12YT2aTA9dDc18r', '4eDL2G2HlRm6ZOTkvxkj2xg86BRgOGUTVLoC5OsF')   #[email protected]
factual = Factual(
    'O7OPvoeCZbUC3Zsy5qld8zZIuZX99w0SKkT6APy8',
    'V7eHUV01tJUyFqFcaLZrXN8cnIEGbUmdyE1ZO2KB')  #[email protected]

#print("Hello")
#places = factual.table('places')

cuisine = "Italian"
postcode = "90007"
rating = 4  #possible values 1-5
price = "expensive"  #possible values Cheap, moderate, Expensive

if (price.lower() == "expensive"):
    price = 5
elif (price.lower() == "cheap"):
    price = 1

elif (price.lower() == "moderate"):
Ejemplo n.º 30
0
import googlemaps
from factual import Factual
from datetime import datetime as dt
import sys
import datetime
import inspect
from factual.utils import circle
from dateutil import tz
import random
import os
import pytz

factual = Factual('gfdD2lYBQ21Cs5M9eRpdEZCgDDswPvDzfeFOqYko',
                  'qkWK3Bv2wK7Jpz4e5JCSlKQVANbev8FHsCkoTSxZ')
gmaps = googlemaps.Client(key='AIzaSyDuSfwq0Nli3CzitI3SZob0t90dprS8JiQ')

places = factual.table('places')


def printresults_food(data, f, counter):

    identifier = "places" + str(counter)

    f.write("<a href=\"javascript: void(0);\" onClick=\"toggle('" +
            identifier + "')\">Click for Name and Phone Number</a>\n")

    track = str(data[u'category_labels'][0][-1])
    name = str(data[u'name'])

    try:
        telephone = str(data[u'tel'])