In [14]:
%load_ext autoreload
%autoreload 2

In [15]:
import os
# import pfile.to
# import pstr.to
from bs4 import BeautifulSoup
import requests
# import pstr
import re
# import pickle
# import urllib2
# from selenium import webdriver
# from selenium.webdriver.common.keys import Keys
import urlparse
import urllib
from datetime import datetime

In [16]:
##########
# SETTINGS
save_folder = os.path.join(os.environ['GD_FOLDER'], 'Shared/ms_otosense')
user_agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.5 Safari/532.2'

################################################
# UTILS

html_re = re.compile('\.html$')

def url_encode(query):
    # look at urlparse for cleaner ways to do this
    return urllib.urlencode({'':query})[1:]

def hms_message(msg=''):
    t = datetime.now().time()
    return "%d:%d:%d - %s" % (t.hour, t.minute, t.second, msg)

def save_text_to_file(s, filepath):
    text_file = open(filepath, "w")
    text_file.write(s.encode('utf-8'))
    text_file.close()

def filename_from_url(url):
    return url.replace('/','§').replace(':','{') + '.html'

def url_from_filename(filename):
    return html_re.sub('', filename.replace('§','/').replace('{',':'))


# def get_dogpile_html_from_query(query):
#     dogpile_url_prefix = 'http://www.dogpile.com/search/web'
#     response = requests.get(dogpile_url_prefix, params={'q': query})
#     if response:
#         return response.text
#     else:
#         return None

# def acquire_query_result_from_dogpile(query, save_folder=os.path.join(os.environ['MS_DATA'], 'misc')):
#     html = get_dogpile_html_from_query(query)
#     if html:
#         file_name = url_encode(query) + '.html'
#         file_path = os.path.join(save_folder, file_name)
#         save_html(html, file_path)
#     else:
#         raise ValueError("There was a problem in acquiring %s" % query)
        
################################################
# SPECIFIC METHODS

dogpile_base_url = 'http://www.dogpile.com'
dogpile_search_url = '/search/web?'
google_base_url = 'https://www.google.com/search?'
google_search_url = '/search?'
gshop_default_params = {
                        'tbm':'shop', # the thing that makes it look on google shopping
                        'tbs':'p_ord:rv', # type of view - could be vw:g,p_ord%3Arv for gridded view
                        'num':'100', # number of results - maximum 100
                        'start': '1' # number of results to start with
                        }     

def qsi_from_result_page_number(page_number):
    return page_number*10 + 1

def get_dogpile_request_url(query, result_page_number=0):
    '''
    returns a url
    '''
    first_item_number = qsi_from_result_page_number(result_page_number)
    return urlparse.urljoin(base=dogpile_base_url, 
                            url=dogpile_search_url 
                            + urllib.urlencode(query={'q': query, 'qsi': first_item_number}))

def get_gshop_request_url(query, result_page_number=0, number_of_results_per_page=100):
    '''
    returns a url to get a google shopping result page
    '''
    start_result_number = "%d" % (result_page_number*number_of_results_per_page + 1)
    get_params = dict(gshop_default_params, 
                      **{'start':start_result_number, 
                         'num':number_of_results_per_page,
                         'query':query})
    return urlparse.urljoin(base=google_base_url, 
                            url=google_search_url 
                            + urllib.urlencode(query=get_params))

################################################
# GENERAL METHODS

# def get_url_from_seed(seed):
#     return get_dogpile_request_url(seed)

# def get_html_from_seed(seed):
#     url = get_url_from_seed(seed)
#     return get_html_of_url(url)

def url_slurper(url):
#     headers = {'User-Agent': user_agent}
#     response = requests.get(url=url, headers=headers)
    response = requests.get(url=url, verify=False)
    if response and response.ok:
        return response.text
    else:
        return None

def html_is_valid(html):
    if html:
        return True
    else:
        return False

def log_progress(msg):
    print hms_message(msg)
    
def log_error(msg):
    print hms_message('ERROR: ' + msg)

def file_path_of_slurp(slurp_spec):
    return os.path.join(save_folder, filename_from_url(slurp_spec))

def save_html_of_slurp(html, slurp_spec):
    save_text_to_file(s=html, filepath=file_path_of_slurp(slurp_spec))

In [17]:
# seed specification
seed_list = [
             '"smoke alarm" flash', '"fire alarm" flash', 'doorbell flash']
n_result_pages = 2

get_url = get_gshop_request_url
get_html_of_url = url_slurper

for i, seed in enumerate(seed_list[:2]):
    for j, result_page in enumerate(range(n_result_pages)):
        # slurp
        url = get_url(seed, result_page)
        log_progress('seed %d, %d: %s (slurping %s)' % (i, j, seed, url))
        try:
            html = get_html_of_url(url)
        except BaseException as e:
            log_error('seed %d, %d (%s): get_html_of_url(%s)' % (i, j, seed, url))
            continue # go to the next seed
        # process
        if html_is_valid:
            save_html_of_slurp(html, url)
        else:
            log_error('seed %d, %d (%s): html not valid: %s' % (i, j, seed, url))
        pause(7)


19:54:46 - seed 0, 0: "smoke alarm" flash (slurping https://www.google.com/search?start=1&num=100&tbm=shop&query=%22smoke+alarm%22+flash&tbs=p_ord%3Arv)
19:54:54 - seed 0, 1: "smoke alarm" flash (slurping https://www.google.com/search?start=101&num=100&tbm=shop&query=%22smoke+alarm%22+flash&tbs=p_ord%3Arv)
19:55:1 - seed 1, 0: "fire alarm" flash (slurping https://www.google.com/search?start=1&num=100&tbm=shop&query=%22fire+alarm%22+flash&tbs=p_ord%3Arv)
19:55:9 - seed 1, 1: "fire alarm" flash (slurping https://www.google.com/search?start=101&num=100&tbm=shop&query=%22fire+alarm%22+flash&tbs=p_ord%3Arv)

In [28]:
e


Out[28]:
requests.exceptions.SSLError(requests.packages.urllib3.exceptions.SSLError(ssl.SSLError(1,
                                                                                        '_ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed')))

In [23]:
print "asdf"
pause(5)
print 'assss'


asdf
assss

In [ ]:


In [19]:
seed_list = [
             '"smoke alarm" flash', '"fire alarm" flash', 'doorbell flash']

In [38]:
url = get_gshop_request_url(seed_list[0])
url


Out[38]:
'https://www.google.com/search?start=1&num=100&tbm=shop&query=%22smoke+alarm%22+flash&tbs=p_ord%3Arv'

In [39]:
html = url_slurper(url)

In [32]:
html = get_html_of_url('http://www.google.com/search?start=1&num=100&tbm=shop&query=%22smoke+alarm%22+flash&tbs=p_ord%3Arv')

In [34]:
import pstr.to

In [40]:
pstr.to.file(html, 'test.html')

In [ ]:
verify=False

In [ ]:
html = get_html_of_url('https://www.google.com/search?start=1&num=100&tbm=shop&query=%22smoke+alarm%22+flash&tbs=p_ord%3Arv')

In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:

Parse dogpile


In [191]:
def get_link_from_results(results_soup):
    urlpane = results_soup.find('div', attrs={'class':'resultDisplayUrlPane'})
    return urlparse.parse_qs(urlpane.find('a', attrs='resultDisplayUrl').attrs['href'])['ru'][0]
def get_title_text_from_results(results_soup):
    return results_soup.find('div', attrs={'class':'resultTitlePane'}).get_text()
def get_description_text_from_results(results_soup):
    return results_soup.find('div', attrs={'class':'resultDescription'}).get_text()


def get_web_results_dict_from_results_soup(results_soup):
    return {
            'link':get_link_from_results(results_soup), 
            'title':get_title_text_from_results(results_soup),
            'description':get_description_text_from_results(results_soup)
            }

def parse_dogpile_html(html):
    b = BeautifulSoup(html)
    
    result_tags = ['resultsAdsTop', 'resultsMain', 'resultsAdsBottom']
    parse_dict = {k: b.find('div',attrs={'id':k}) for k in result_tags}
    
    parse_dict['resultsAdsTop'] = parse_dict['resultsAdsTop'].findAll('div',attrs={'class':'searchResult adResult'})
    parse_dict['resultsMain'] = parse_dict['resultsMain'].findAll('div',attrs={'class':'searchResult webResult'})
    parse_dict['resultsAdsBottom'] = parse_dict['resultsAdsBottom'].findAll('div',attrs={'class':'searchResult adResult'})

    parse_dict['resultsMain'] = [get_web_results_dict_from_results_soup(r) for r in parse_dict['resultsMain']]
    
    return parse_dict


def diagnose_parse_dict(parse_dict):
    print "parse_dict_keys: %s" % d.keys()
    print "number of resultsMain: %d" % len(d['resultsMain'])
    print d['resultsMain'][0]

In [192]:
d = parse_dogpile_html(html)
diagnose_parse_dict(d)


parse_dict_keys: ['resultsAdsBottom', 'resultsAdsTop', 'resultsMain']
number of resultsMain: 10
{'link': 'http://www.devices4less.com/Doorbell.html', 'description': u'Offering remote signal recievers, door knock alerts, doorbell signalers, strobe remote recievers, vibes bed vibrators, telephone signalers, loud horn', 'title': u'\nDoorbell Strobe Lights - Doorbell Signalers - Door Knock Alerting\n'}

In [ ]:


In [ ]:


In [ ]:
url = 'https://www.google.com/search?hl=en&tbm=shop&q=deaf+alarm+clock'

In [3]:
'https://www.google.com/search?hl=en&tbm=shop&q=deaf+alarm+clock&tbs=vw:g,p_ord:rv'


Out[3]:
'https://www.google.com/search?hl=en&tbm=shop&q=deaf+alarm+clock&tbs=vw:g,p_ord:rv'

In [ ]:
'num=100'

In [ ]:
https://www.google.com/search?hl=en&tbm=shop&q=deaf+alarm+clock&tbs=vw:g,p_ord:rv

In [4]:
https://www.google.com/search?tbm=shop&q=deaf+alarm+clock&tbs=vw:g,p_ord%3Arv&start=1&num=100


  File "<ipython-input-4-c2241bbd8786>", line 1
    https://www.google.com/search?num=100&tbs=p_ord%3Arv&tbm=shop&q=deaf+alarm+clock
         ^
SyntaxError: invalid syntax

In [14]:
default_gshop_params = {
                        'tbm':'shop', # the thing that makes it look on google shopping
                        'tbs':'p_ord%3Arv', # type of view - could be vw:g,p_ord%3Arv for gridded view
                        'num':'100', # number of results - maximum 100
                        'start': '1' # number of results to start with
                        }   
default_gshop_params


Out[14]:
{'num': '100', 'start': '1', 'tbm': 'shop', 'tbs': 'p_ord%3Arv'}

In [13]:
dict(default_gshop_params, **{'start':'77', 'q':'adsf+asdf'})


Out[13]:
{'num': '100',
 'q': 'adsf+asdf',
 'start': '77',
 'tbm': 'shop',
 'tbs': 'p_ord%3Arv'}

In [ ]:
def mk_

In [12]:



  File "<ipython-input-12-d43da87f5329>", line 1
    *{'start':'77'}
    ^
SyntaxError: invalid syntax

In [ ]:

Comments


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:

Scrap


In [ ]:
http://www.youtube.com/results?search_query=deaf&page=5
linkto:http://www.gallaudet.edu/clerc_center/information_and_resources/info_to_go/hearing_and_communication_technology/alerting_devices/

temp


In [3]:
searchterms_dict = dict()
searchterms_dict['who'] = ['deaf', '"hard of hearing"', '"hearing impaired"', 
          '"hearing impairment"', '"hearing loss"']
searchterms_dict['what'] = ['clock', '"baby monitor"', '"fire alarm"', '"smoke alarm"', 'alarm']
searchterms_dict['how'] = ['flash', 'flashing', 'vibrate', 'vibrating']
searchterms_dict['where'] = ['', 'site:facebook.com', 'site:youtube.com', 'site:twitter.com']
import itertools

query_list = [' '.join(x) for x in itertools.product(searchterms_dict['who'],
                                             searchterms_dict['what'],searchterms_dict['how'], searchterms_dict['where']  )]

print len(query_list)
print query_list[:4]


400
['deaf clock flash ', 'deaf clock flash site:facebook.com', 'deaf clock flash site:youtube.com', 'deaf clock flash site:twitter.com']

Google Shopping


In [30]:



  File "<ipython-input-30-d87f5d551a64>", line 1
    url_list = for query in query_list: url_list[query.index]=get_gshop_request_url(query, result_page_number=0, number_of_results_per_page=100)[query.index] ]
                 ^
SyntaxError: invalid syntax

In [26]:
for query in query_list: print query


deaf clock flash 
deaf clock flash site:facebook.com
deaf clock flash site:youtube.com
deaf clock flash site:twitter.com
deaf clock flashing 
deaf clock flashing site:facebook.com
deaf clock flashing site:youtube.com
deaf clock flashing site:twitter.com
deaf clock vibrate 
deaf clock vibrate site:facebook.com
deaf clock vibrate site:youtube.com
deaf clock vibrate site:twitter.com
deaf clock vibrating 
deaf clock vibrating site:facebook.com
deaf clock vibrating site:youtube.com
deaf clock vibrating site:twitter.com
deaf "baby monitor" flash 
deaf "baby monitor" flash site:facebook.com
deaf "baby monitor" flash site:youtube.com
deaf "baby monitor" flash site:twitter.com
deaf "baby monitor" flashing 
deaf "baby monitor" flashing site:facebook.com
deaf "baby monitor" flashing site:youtube.com
deaf "baby monitor" flashing site:twitter.com
deaf "baby monitor" vibrate 
deaf "baby monitor" vibrate site:facebook.com
deaf "baby monitor" vibrate site:youtube.com
deaf "baby monitor" vibrate site:twitter.com
deaf "baby monitor" vibrating 
deaf "baby monitor" vibrating site:facebook.com
deaf "baby monitor" vibrating site:youtube.com
deaf "baby monitor" vibrating site:twitter.com
deaf "fire alarm" flash 
deaf "fire alarm" flash site:facebook.com
deaf "fire alarm" flash site:youtube.com
deaf "fire alarm" flash site:twitter.com
deaf "fire alarm" flashing 
deaf "fire alarm" flashing site:facebook.com
deaf "fire alarm" flashing site:youtube.com
deaf "fire alarm" flashing site:twitter.com
deaf "fire alarm" vibrate 
deaf "fire alarm" vibrate site:facebook.com
deaf "fire alarm" vibrate site:youtube.com
deaf "fire alarm" vibrate site:twitter.com
deaf "fire alarm" vibrating 
deaf "fire alarm" vibrating site:facebook.com
deaf "fire alarm" vibrating site:youtube.com
deaf "fire alarm" vibrating site:twitter.com
deaf "smoke alarm" flash 
deaf "smoke alarm" flash site:facebook.com
deaf "smoke alarm" flash site:youtube.com
deaf "smoke alarm" flash site:twitter.com
deaf "smoke alarm" flashing 
deaf "smoke alarm" flashing site:facebook.com
deaf "smoke alarm" flashing site:youtube.com
deaf "smoke alarm" flashing site:twitter.com
deaf "smoke alarm" vibrate 
deaf "smoke alarm" vibrate site:facebook.com
deaf "smoke alarm" vibrate site:youtube.com
deaf "smoke alarm" vibrate site:twitter.com
deaf "smoke alarm" vibrating 
deaf "smoke alarm" vibrating site:facebook.com
deaf "smoke alarm" vibrating site:youtube.com
deaf "smoke alarm" vibrating site:twitter.com
deaf alarm flash 
deaf alarm flash site:facebook.com
deaf alarm flash site:youtube.com
deaf alarm flash site:twitter.com
deaf alarm flashing 
deaf alarm flashing site:facebook.com
deaf alarm flashing site:youtube.com
deaf alarm flashing site:twitter.com
deaf alarm vibrate 
deaf alarm vibrate site:facebook.com
deaf alarm vibrate site:youtube.com
deaf alarm vibrate site:twitter.com
deaf alarm vibrating 
deaf alarm vibrating site:facebook.com
deaf alarm vibrating site:youtube.com
deaf alarm vibrating site:twitter.com
"hard of hearing" clock flash 
"hard of hearing" clock flash site:facebook.com
"hard of hearing" clock flash site:youtube.com
"hard of hearing" clock flash site:twitter.com
"hard of hearing" clock flashing 
"hard of hearing" clock flashing site:facebook.com
"hard of hearing" clock flashing site:youtube.com
"hard of hearing" clock flashing site:twitter.com
"hard of hearing" clock vibrate 
"hard of hearing" clock vibrate site:facebook.com
"hard of hearing" clock vibrate site:youtube.com
"hard of hearing" clock vibrate site:twitter.com
"hard of hearing" clock vibrating 
"hard of hearing" clock vibrating site:facebook.com
"hard of hearing" clock vibrating site:youtube.com
"hard of hearing" clock vibrating site:twitter.com
"hard of hearing" "baby monitor" flash 
"hard of hearing" "baby monitor" flash site:facebook.com
"hard of hearing" "baby monitor" flash site:youtube.com
"hard of hearing" "baby monitor" flash site:twitter.com
"hard of hearing" "baby monitor" flashing 
"hard of hearing" "baby monitor" flashing site:facebook.com
"hard of hearing" "baby monitor" flashing site:youtube.com
"hard of hearing" "baby monitor" flashing site:twitter.com
"hard of hearing" "baby monitor" vibrate 
"hard of hearing" "baby monitor" vibrate site:facebook.com
"hard of hearing" "baby monitor" vibrate site:youtube.com
"hard of hearing" "baby monitor" vibrate site:twitter.com
"hard of hearing" "baby monitor" vibrating 
"hard of hearing" "baby monitor" vibrating site:facebook.com
"hard of hearing" "baby monitor" vibrating site:youtube.com
"hard of hearing" "baby monitor" vibrating site:twitter.com
"hard of hearing" "fire alarm" flash 
"hard of hearing" "fire alarm" flash site:facebook.com
"hard of hearing" "fire alarm" flash site:youtube.com
"hard of hearing" "fire alarm" flash site:twitter.com
"hard of hearing" "fire alarm" flashing 
"hard of hearing" "fire alarm" flashing site:facebook.com
"hard of hearing" "fire alarm" flashing site:youtube.com
"hard of hearing" "fire alarm" flashing site:twitter.com
"hard of hearing" "fire alarm" vibrate 
"hard of hearing" "fire alarm" vibrate site:facebook.com
"hard of hearing" "fire alarm" vibrate site:youtube.com
"hard of hearing" "fire alarm" vibrate site:twitter.com
"hard of hearing" "fire alarm" vibrating 
"hard of hearing" "fire alarm" vibrating site:facebook.com
"hard of hearing" "fire alarm" vibrating site:youtube.com
"hard of hearing" "fire alarm" vibrating site:twitter.com
"hard of hearing" "smoke alarm" flash 
"hard of hearing" "smoke alarm" flash site:facebook.com
"hard of hearing" "smoke alarm" flash site:youtube.com
"hard of hearing" "smoke alarm" flash site:twitter.com
"hard of hearing" "smoke alarm" flashing 
"hard of hearing" "smoke alarm" flashing site:facebook.com
"hard of hearing" "smoke alarm" flashing site:youtube.com
"hard of hearing" "smoke alarm" flashing site:twitter.com
"hard of hearing" "smoke alarm" vibrate 
"hard of hearing" "smoke alarm" vibrate site:facebook.com
"hard of hearing" "smoke alarm" vibrate site:youtube.com
"hard of hearing" "smoke alarm" vibrate site:twitter.com
"hard of hearing" "smoke alarm" vibrating 
"hard of hearing" "smoke alarm" vibrating site:facebook.com
"hard of hearing" "smoke alarm" vibrating site:youtube.com
"hard of hearing" "smoke alarm" vibrating site:twitter.com
"hard of hearing" alarm flash 
"hard of hearing" alarm flash site:facebook.com
"hard of hearing" alarm flash site:youtube.com
"hard of hearing" alarm flash site:twitter.com
"hard of hearing" alarm flashing 
"hard of hearing" alarm flashing site:facebook.com
"hard of hearing" alarm flashing site:youtube.com
"hard of hearing" alarm flashing site:twitter.com
"hard of hearing" alarm vibrate 
"hard of hearing" alarm vibrate site:facebook.com
"hard of hearing" alarm vibrate site:youtube.com
"hard of hearing" alarm vibrate site:twitter.com
"hard of hearing" alarm vibrating 
"hard of hearing" alarm vibrating site:facebook.com
"hard of hearing" alarm vibrating site:youtube.com
"hard of hearing" alarm vibrating site:twitter.com
"hearing impaired" clock flash 
"hearing impaired" clock flash site:facebook.com
"hearing impaired" clock flash site:youtube.com
"hearing impaired" clock flash site:twitter.com
"hearing impaired" clock flashing 
"hearing impaired" clock flashing site:facebook.com
"hearing impaired" clock flashing site:youtube.com
"hearing impaired" clock flashing site:twitter.com
"hearing impaired" clock vibrate 
"hearing impaired" clock vibrate site:facebook.com
"hearing impaired" clock vibrate site:youtube.com
"hearing impaired" clock vibrate site:twitter.com
"hearing impaired" clock vibrating 
"hearing impaired" clock vibrating site:facebook.com
"hearing impaired" clock vibrating site:youtube.com
"hearing impaired" clock vibrating site:twitter.com
"hearing impaired" "baby monitor" flash 
"hearing impaired" "baby monitor" flash site:facebook.com
"hearing impaired" "baby monitor" flash site:youtube.com
"hearing impaired" "baby monitor" flash site:twitter.com
"hearing impaired" "baby monitor" flashing 
"hearing impaired" "baby monitor" flashing site:facebook.com
"hearing impaired" "baby monitor" flashing site:youtube.com
"hearing impaired" "baby monitor" flashing site:twitter.com
"hearing impaired" "baby monitor" vibrate 
"hearing impaired" "baby monitor" vibrate site:facebook.com
"hearing impaired" "baby monitor" vibrate site:youtube.com
"hearing impaired" "baby monitor" vibrate site:twitter.com
"hearing impaired" "baby monitor" vibrating 
"hearing impaired" "baby monitor" vibrating site:facebook.com
"hearing impaired" "baby monitor" vibrating site:youtube.com
"hearing impaired" "baby monitor" vibrating site:twitter.com
"hearing impaired" "fire alarm" flash 
"hearing impaired" "fire alarm" flash site:facebook.com
"hearing impaired" "fire alarm" flash site:youtube.com
"hearing impaired" "fire alarm" flash site:twitter.com
"hearing impaired" "fire alarm" flashing 
"hearing impaired" "fire alarm" flashing site:facebook.com
"hearing impaired" "fire alarm" flashing site:youtube.com
"hearing impaired" "fire alarm" flashing site:twitter.com
"hearing impaired" "fire alarm" vibrate 
"hearing impaired" "fire alarm" vibrate site:facebook.com
"hearing impaired" "fire alarm" vibrate site:youtube.com
"hearing impaired" "fire alarm" vibrate site:twitter.com
"hearing impaired" "fire alarm" vibrating 
"hearing impaired" "fire alarm" vibrating site:facebook.com
"hearing impaired" "fire alarm" vibrating site:youtube.com
"hearing impaired" "fire alarm" vibrating site:twitter.com
"hearing impaired" "smoke alarm" flash 
"hearing impaired" "smoke alarm" flash site:facebook.com
"hearing impaired" "smoke alarm" flash site:youtube.com
"hearing impaired" "smoke alarm" flash site:twitter.com
"hearing impaired" "smoke alarm" flashing 
"hearing impaired" "smoke alarm" flashing site:facebook.com
"hearing impaired" "smoke alarm" flashing site:youtube.com
"hearing impaired" "smoke alarm" flashing site:twitter.com
"hearing impaired" "smoke alarm" vibrate 
"hearing impaired" "smoke alarm" vibrate site:facebook.com
"hearing impaired" "smoke alarm" vibrate site:youtube.com
"hearing impaired" "smoke alarm" vibrate site:twitter.com
"hearing impaired" "smoke alarm" vibrating 
"hearing impaired" "smoke alarm" vibrating site:facebook.com
"hearing impaired" "smoke alarm" vibrating site:youtube.com
"hearing impaired" "smoke alarm" vibrating site:twitter.com
"hearing impaired" alarm flash 
"hearing impaired" alarm flash site:facebook.com
"hearing impaired" alarm flash site:youtube.com
"hearing impaired" alarm flash site:twitter.com
"hearing impaired" alarm flashing 
"hearing impaired" alarm flashing site:facebook.com
"hearing impaired" alarm flashing site:youtube.com
"hearing impaired" alarm flashing site:twitter.com
"hearing impaired" alarm vibrate 
"hearing impaired" alarm vibrate site:facebook.com
"hearing impaired" alarm vibrate site:youtube.com
"hearing impaired" alarm vibrate site:twitter.com
"hearing impaired" alarm vibrating 
"hearing impaired" alarm vibrating site:facebook.com
"hearing impaired" alarm vibrating site:youtube.com
"hearing impaired" alarm vibrating site:twitter.com
"hearing impairment" clock flash 
"hearing impairment" clock flash site:facebook.com
"hearing impairment" clock flash site:youtube.com
"hearing impairment" clock flash site:twitter.com
"hearing impairment" clock flashing 
"hearing impairment" clock flashing site:facebook.com
"hearing impairment" clock flashing site:youtube.com
"hearing impairment" clock flashing site:twitter.com
"hearing impairment" clock vibrate 
"hearing impairment" clock vibrate site:facebook.com
"hearing impairment" clock vibrate site:youtube.com
"hearing impairment" clock vibrate site:twitter.com
"hearing impairment" clock vibrating 
"hearing impairment" clock vibrating site:facebook.com
"hearing impairment" clock vibrating site:youtube.com
"hearing impairment" clock vibrating site:twitter.com
"hearing impairment" "baby monitor" flash 
"hearing impairment" "baby monitor" flash site:facebook.com
"hearing impairment" "baby monitor" flash site:youtube.com
"hearing impairment" "baby monitor" flash site:twitter.com
"hearing impairment" "baby monitor" flashing 
"hearing impairment" "baby monitor" flashing site:facebook.com
"hearing impairment" "baby monitor" flashing site:youtube.com
"hearing impairment" "baby monitor" flashing site:twitter.com
"hearing impairment" "baby monitor" vibrate 
"hearing impairment" "baby monitor" vibrate site:facebook.com
"hearing impairment" "baby monitor" vibrate site:youtube.com
"hearing impairment" "baby monitor" vibrate site:twitter.com
"hearing impairment" "baby monitor" vibrating 
"hearing impairment" "baby monitor" vibrating site:facebook.com
"hearing impairment" "baby monitor" vibrating site:youtube.com
"hearing impairment" "baby monitor" vibrating site:twitter.com
"hearing impairment" "fire alarm" flash 
"hearing impairment" "fire alarm" flash site:facebook.com
"hearing impairment" "fire alarm" flash site:youtube.com
"hearing impairment" "fire alarm" flash site:twitter.com
"hearing impairment" "fire alarm" flashing 
"hearing impairment" "fire alarm" flashing site:facebook.com
"hearing impairment" "fire alarm" flashing site:youtube.com
"hearing impairment" "fire alarm" flashing site:twitter.com
"hearing impairment" "fire alarm" vibrate 
"hearing impairment" "fire alarm" vibrate site:facebook.com
"hearing impairment" "fire alarm" vibrate site:youtube.com
"hearing impairment" "fire alarm" vibrate site:twitter.com
"hearing impairment" "fire alarm" vibrating 
"hearing impairment" "fire alarm" vibrating site:facebook.com
"hearing impairment" "fire alarm" vibrating site:youtube.com
"hearing impairment" "fire alarm" vibrating site:twitter.com
"hearing impairment" "smoke alarm" flash 
"hearing impairment" "smoke alarm" flash site:facebook.com
"hearing impairment" "smoke alarm" flash site:youtube.com
"hearing impairment" "smoke alarm" flash site:twitter.com
"hearing impairment" "smoke alarm" flashing 
"hearing impairment" "smoke alarm" flashing site:facebook.com
"hearing impairment" "smoke alarm" flashing site:youtube.com
"hearing impairment" "smoke alarm" flashing site:twitter.com
"hearing impairment" "smoke alarm" vibrate 
"hearing impairment" "smoke alarm" vibrate site:facebook.com
"hearing impairment" "smoke alarm" vibrate site:youtube.com
"hearing impairment" "smoke alarm" vibrate site:twitter.com
"hearing impairment" "smoke alarm" vibrating 
"hearing impairment" "smoke alarm" vibrating site:facebook.com
"hearing impairment" "smoke alarm" vibrating site:youtube.com
"hearing impairment" "smoke alarm" vibrating site:twitter.com
"hearing impairment" alarm flash 
"hearing impairment" alarm flash site:facebook.com
"hearing impairment" alarm flash site:youtube.com
"hearing impairment" alarm flash site:twitter.com
"hearing impairment" alarm flashing 
"hearing impairment" alarm flashing site:facebook.com
"hearing impairment" alarm flashing site:youtube.com
"hearing impairment" alarm flashing site:twitter.com
"hearing impairment" alarm vibrate 
"hearing impairment" alarm vibrate site:facebook.com
"hearing impairment" alarm vibrate site:youtube.com
"hearing impairment" alarm vibrate site:twitter.com
"hearing impairment" alarm vibrating 
"hearing impairment" alarm vibrating site:facebook.com
"hearing impairment" alarm vibrating site:youtube.com
"hearing impairment" alarm vibrating site:twitter.com
"hearing loss" clock flash 
"hearing loss" clock flash site:facebook.com
"hearing loss" clock flash site:youtube.com
"hearing loss" clock flash site:twitter.com
"hearing loss" clock flashing 
"hearing loss" clock flashing site:facebook.com
"hearing loss" clock flashing site:youtube.com
"hearing loss" clock flashing site:twitter.com
"hearing loss" clock vibrate 
"hearing loss" clock vibrate site:facebook.com
"hearing loss" clock vibrate site:youtube.com
"hearing loss" clock vibrate site:twitter.com
"hearing loss" clock vibrating 
"hearing loss" clock vibrating site:facebook.com
"hearing loss" clock vibrating site:youtube.com
"hearing loss" clock vibrating site:twitter.com
"hearing loss" "baby monitor" flash 
"hearing loss" "baby monitor" flash site:facebook.com
"hearing loss" "baby monitor" flash site:youtube.com
"hearing loss" "baby monitor" flash site:twitter.com
"hearing loss" "baby monitor" flashing 
"hearing loss" "baby monitor" flashing site:facebook.com
"hearing loss" "baby monitor" flashing site:youtube.com
"hearing loss" "baby monitor" flashing site:twitter.com
"hearing loss" "baby monitor" vibrate 
"hearing loss" "baby monitor" vibrate site:facebook.com
"hearing loss" "baby monitor" vibrate site:youtube.com
"hearing loss" "baby monitor" vibrate site:twitter.com
"hearing loss" "baby monitor" vibrating 
"hearing loss" "baby monitor" vibrating site:facebook.com
"hearing loss" "baby monitor" vibrating site:youtube.com
"hearing loss" "baby monitor" vibrating site:twitter.com
"hearing loss" "fire alarm" flash 
"hearing loss" "fire alarm" flash site:facebook.com
"hearing loss" "fire alarm" flash site:youtube.com
"hearing loss" "fire alarm" flash site:twitter.com
"hearing loss" "fire alarm" flashing 
"hearing loss" "fire alarm" flashing site:facebook.com
"hearing loss" "fire alarm" flashing site:youtube.com
"hearing loss" "fire alarm" flashing site:twitter.com
"hearing loss" "fire alarm" vibrate 
"hearing loss" "fire alarm" vibrate site:facebook.com
"hearing loss" "fire alarm" vibrate site:youtube.com
"hearing loss" "fire alarm" vibrate site:twitter.com
"hearing loss" "fire alarm" vibrating 
"hearing loss" "fire alarm" vibrating site:facebook.com
"hearing loss" "fire alarm" vibrating site:youtube.com
"hearing loss" "fire alarm" vibrating site:twitter.com
"hearing loss" "smoke alarm" flash 
"hearing loss" "smoke alarm" flash site:facebook.com
"hearing loss" "smoke alarm" flash site:youtube.com
"hearing loss" "smoke alarm" flash site:twitter.com
"hearing loss" "smoke alarm" flashing 
"hearing loss" "smoke alarm" flashing site:facebook.com
"hearing loss" "smoke alarm" flashing site:youtube.com
"hearing loss" "smoke alarm" flashing site:twitter.com
"hearing loss" "smoke alarm" vibrate 
"hearing loss" "smoke alarm" vibrate site:facebook.com
"hearing loss" "smoke alarm" vibrate site:youtube.com
"hearing loss" "smoke alarm" vibrate site:twitter.com
"hearing loss" "smoke alarm" vibrating 
"hearing loss" "smoke alarm" vibrating site:facebook.com
"hearing loss" "smoke alarm" vibrating site:youtube.com
"hearing loss" "smoke alarm" vibrating site:twitter.com
"hearing loss" alarm flash 
"hearing loss" alarm flash site:facebook.com
"hearing loss" alarm flash site:youtube.com
"hearing loss" alarm flash site:twitter.com
"hearing loss" alarm flashing 
"hearing loss" alarm flashing site:facebook.com
"hearing loss" alarm flashing site:youtube.com
"hearing loss" alarm flashing site:twitter.com
"hearing loss" alarm vibrate 
"hearing loss" alarm vibrate site:facebook.com
"hearing loss" alarm vibrate site:youtube.com
"hearing loss" alarm vibrate site:twitter.com
"hearing loss" alarm vibrating 
"hearing loss" alarm vibrating site:facebook.com
"hearing loss" alarm vibrating site:youtube.com
"hearing loss" alarm vibrating site:twitter.com

In [ ]: