Google Suggest Scraping Spider in PHP, scrape millions of organic search phrases
All scraping projects:

Google and Bing Scraping Service (new)

Google Search scraper

Google Suggest scraper

Google Finance scraper

Google Suggest Scraping Spider PHP Code

Project offered by compunect [scraping@compunect.com] last successful test run: 30th March 2014

The Google Suggest Scraping Spider is an advanced open source Google autocomplete scraping project. You may use this code as it is (see below) or customize it to power your fresh startup or project. You can either customize this project by yourself or hire us to do what we can do best ;) compunect is an IT services and development company originally founded in Germany and is now situated in Czech Republic focused at challenging tasks.

The Google Suggest Scraping Spider main features:

  • This scraper can operate 24 hours a day 7 days a week without getting blocked

  • Ability to scrape literally unlimited amount of related keywords and phrases from just a single keyword

  • Supports the new Google Suggest Chrome API, providing double the amount of results and additional meta information to refine

  • Scraping of single or multiple keywords and spidering into hundred thousands of related recursions

  • Support of keyword suggest mutation by adding automatically a singgle character, resulting in nearly 300 additional suggestions per keyword.

  • Automated IP rotation and management, delay management, failsave mechanisms

  • Full automated functions, human readable output and machine readable storage array

  • Support for all available Google languages

  • Well structured and readable code, easy to modify and customize

  • Local storage cache to use IP addresses best possible and can continue where it was stopped/interrupted

  • Very easy to start and configure, does not require expert programming knowhow to be used

  • Open source PHP code available for commercial use, easily worth multiple thousand USD

  • Perfectly suitable as background process on a Linux server (Amazon offers EC2 Linux servers one year for free)


Our Google Search Scraper was quite a big success and it is used to power projects of some of the worlds most known companies (Forbes 100) and from many more promising startups. While the Google Search Scraper focuses on gathering search ranks from Google the new Google Suggest Scraping Spider is focused on scraping what the 500 million Google users are really searching for. This is usually hidden beyond Googles walls, this project can drag the hidden information out of the shadows. It was quite a big surprise when I found out about the depth of information which is hidden below the normal sight of a Google Search user, behind every simple keyword wait ten-thousands of related phrases and keywords which can be made visible through this spider. Scraping the Google suggest engine makes it possible to find out what users are really searching for, from short to long-tail phrases. This information can be used in many different ways. I will go in detail about some usage scenarios a bit later.

Scraping Challenges

For almost any developer it is quite a challenging task to finish such a project. There are many possible issues arising from scraping and this is knowledge not taught in a usual University. Google wrote the engine for licensed partners and search users, so it is important to behave like a browser and user. Wrong behaviour will lead to a block of IPs either short or long term, threatening your company, server and project. This code solves all the typical challenges and provides an easily customizable basement for your own project, or it may be used as it is.

Some possible usage scenarios

    This tool is very useful for anyone working in the area of SEO (Search engine optimization) or online advertisements. Some general ideas:
  • Keyword research: This tool can expand a keyword easily into thousands or ten thousands of related keywords and phrases. All those results are directly related to current real organic search. This means you can target a blog, article, website, or advertisement directly to the search of real users.
  • Long-tail keyword research: Ranking a short search phrase/keyword in a competitive area can be very difficult. The scraped suggest results will contain countless phrases you would not have thought about or even inspire you.
  • Your own Zeitgeist Every year Google offers "Google Zeitgeist", a snapshot of one year what people have been searching for. Run this scraper regularly with a set of specific keywords into a database and you can create your own Zeitgeist study which can draw quite some attention.
  • News research: Blogs, Articles and News websites can use this information to tailor their stories exactly to the interest of users to gain more viewers. Or find out which sort of articles people would like to read.
  • Blackhat SEO In blackhat SEO this information can be used for automated articles or link-building based on unlimited different real search requests.

IP/Proxy management

When scraping it is most essential to avoid detection. Google will ban any user IP who tries to automatically scrape their offers, if it can detect it. In the worst case they can throw out a ban which blocks ten thousands of IP addresses permanently. This is usually all that happens, it threatens the project but not the legal entity behind it. However there is also a legal threat. If you do not accept the search engine TOS you should not have legal threats with passively scraping it. To make sure about that you need to consult your local lawyer. While I have years of experience working with Google Search scrapers, for Google Suggest I do not have longterm experience yet. This project is based on information I could gather during research and development but so far no long-term stability data is available. However, I am confident the integrated features will prevent it from getting blocked or detected. If not I will update the code here for free to reflect new knowledge. These measures have been taken to prevent detection during scraping: *) Local file based caching reduces the amount of requests and potential duplicate keyword lookups *) IP management routines remember the usage of each single IP address and reads/stores this data in a local file *) Delay routines put correct delays between requests and IP changes to avoid detection and obvious non organic request rates *) Request calls and HTTP headers fake a Chrome or Firefox browser, the code simulates searching through a Chrome/Firefox browser *) You can select if you wish to act as Firefox toolbar or Chrome browser, this even results in using a completely different API! *) A powerful HTTP library (libcURL) is used to connect to Google, this allows fine control of the behaviour

US-Proxy support

This project runs through a US Proxy service, powered through the supplied API it is possible to scrape millions of results without getting blocked. The benefit of using us-proxies.com is an easily extendable IP service providing the best IP quality in the industry at a fair price aimed toward professionals. However, the code is not limited to this particular service. You are free to adapt the source to suit your needs.

Example output from the scraper

Here are two example result-sets from a test-run:
Keyword: 'Scraping Google' Using mutation, worldwide dataset with english preference, 3 level spidering in Chrome API mode The results are of very high quality and relevance due to the new API and usage of the provided revelance meta data

Finished Recursion level reached: 3, Total keywords: 282 keywords, Time spent: 307 seconds Google Suggest Spider results Recursion level 0 contains 146 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | scraping google | scraping google scholar | | | scraping google finance | | | scraping google maps | | | scraping google news | | | scraping google groups | | | scraping google play | | | scraping google search results python | | | scraping google cache | | | scraping google trends | | | scraping google images | | | scraping google maps results | | | scraping google image search | | | scraping google ranks for fun and profit | | | scraping google translate | | | scraping google adwords | | | scraping google search results php | | scraping google a | scraping google adwords | | | scraping google adwords keyword tool | | | scrape google ads | | | scrape google autocomplete | | | scrape google analytics real time | | | scrape google art project | | | google scraping api | | | web scraping google app engine | | scraping google b | scrape google books | | | scrape google business listings | | | scrape google blog search | | | scrape google local business | | | bing scraping google | | scraping google c | scraping google cache | | | scrape google captcha | | | scrape google calendar | | | google chrome scraper | | | screen scraping google chrome | | | scraping google results c# | | | google content scraping | | scraping google d | scraping google docs | | | scrape data google keyword tool | | | web scraping google docs | | | scrape google finance data | | | scraping websites with google docs | | | google data scraping | | | data scraping google maps | | scraping google e | scrape emails google | | | scrape google results excel | | | web scraping google app engine | | scraping google f | scraping google finance | | | scraping from google | | | scrape google places free | | | scraping data from google maps | | | scrape google product feed | | scraping google g | scraping google groups | | | scrape google without getting banned | | scraping google i | scraping google images | | scraping google j | scraping google java | | scraping google k | scraping google keyword tool | | | scrape google keyword planner | | | scraping google adwords keyword tool | | | scrape data google keyword tool | | scraping google l | scrape google local results | | | scrape google local business | | | scrape google listings | | | scrape links google | | | scrape google business listings | | scraping google m | scraping google maps | | | scraping google maps results | | | data scraping google maps | | | screen scrape google maps | | scraping google n | scraping google news | | | scrape google news python | | | scrape google nokogiri | | | scrape google .net | | scraping google o | scrape google online | | scraping google p | scraping google play | | | scraping google places | | | scraping google plus | | | scraping google pages | | | scrape google python | | | scrape google php | | | scrape google places free | | | google scraping proxy | | | scrape google news python | | | scrape google results php | | | scrape google art project | | | scrape google search page | | | scrape google keyword planner | | | scraping google search results python | | | scraping google search results php | | scraping google r | scraping google results | | | scraping google ranks for fun and profit | | | scraping google results c# | | | scrape google results into excel | | | scrape google results php | | | scrape google results software | | | scrape google results excel | | | scraping google search results python | | | bing scraping google results | | | screen scraping google results | | | scraping google search results php | | | scraping google maps results | | | scrape google shopping results | | | python scrape google results | | | scrape google search results java | | | scrape google play reviews | | | scrape google analytics real time | | | scrape google local results | | | scrape google scholar results | | | scrape google search results online | | scraping google s | scraping google search | | | scraping google scholar | | | scraping google search results python | | | scraping google search results php | | | scraping google spreadsheet | | | scraping google shopping | | | google suggest scraper | | | scrape google shopping results | | | scrape google search results java | | | scrape google search results excel | | | scrape google scholar results | | | scrape google search page | | | scrape google search results online | | | google scraping script | | | google scraping service | | | google scrape similar | | | web scraping google search results | | | screen scraping google search results | | | web scraping google scholar | | | scraping google image search | | scraping google t | scraping google trends | | | scraping google translate | | | google scraping tool | | | scraping google keyword tool | | | scraping google with tor | | | scraping google adwords keyword tool | | scraping google u | scraping using google | | | web scraping using google docs | | scraping google w | scraping google with python | | | scraping google with tor | | | scrape google without getting banned | | | scraping with google docs | | | web scraping with google docs | | | scraping websites with google docs | | | google web scraping | | | web scraping google search results | | | web scraping google app engine | | | web scraping google scholar | Recursion level 1 contains 107 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | scraping google scholar | scrape google scholar results | | | web scraping google scholar | | scraping google maps | scraping google maps results | | | data scraping google maps | | | screen scrape google maps | | scraping google news | scrape google news python | | scraping google images | python scrape google images | | scraping google adwords | scraping google adwords keyword tool | | google scraping api | web scraping google api | | google chrome scraper | google chrome scraper tutorial | | | how to use google chrome scraper | | scraping google docs | web scraping google docs | | | scraping websites with google docs | | google data scraping | google chrome data scraping | | | data scraping google maps | | scrape emails google | scrape emails from google search | | scrape google results excel | scrape google results into excel | | scraping from google | scraping data from google maps | | | scraping google maps | | | scraping google images | | | scraping google finance | | | scraping google play | | | scraping google scholar | | | scraping google places | | | scraping google groups | | | scraping google translate | | | scraping google news | | | scraping google search results python | | | scraping google keyword tool | | | scraping google plus | | | scraping google cache | | | scraping google with python | | | scraping google trends | | | scraping google with tor | | | scraping google shopping | | | scraping google image search | | scraping google keyword tool | scraping google adwords keyword tool | | | scrape data google keyword tool | | scrape google listings | scrape google business listings | | scrape google online | scrape google search results online | | scraping google places | scrape google places free | | | php scrape google places | | scrape google python | scrape google news python | | | scrape google search results python | | | python scrape google finance | | scrape google php | scrape google results php | | | scrape google search results php | | | php scrape google places | | scrape google results php | scrape google search results php | | scraping google results | scraping google results c# | | | scrape google results into excel | | | scrape google results php | | | scrape google results software | | | scrape google results excel | | | scraping google search results python | | | bing scraping google results | | | screen scraping google results | | | scraping google search results php | | | scraping google maps results | | | scrape google shopping results | | | python scrape google results | | | scrape google search results java | | | scrape google local results | | | scrape google scholar results | | | scrape google search results online | | | perl scrape google results | | | web scraping google search results | | screen scraping google results | screen scraping google search results | | python scrape google results | python scrape google search results | | scraping google search | scraping google search results python | | | scraping google search results php | | | scrape google search results java | | | scrape google search results excel | | | scrape google search page | | | scrape google search results online | | | web scraping google search results | | | screen scraping google search results | | | scraping google image search | | | scrape google blog search | | scraping google spreadsheet | scraping google docs | | scraping google shopping | scrape google shopping results | | google suggest scraper | google suggest scraper php | | | google suggest scraper script | | | google suggest scraper php script | | | google suggest keyword suggestion scraper tool | | google scraping service | google terms of service scraping | | google scraping tool | google suggest scraper tool | | | google keyword scraper tool | | | google places scraper tool | | | google url scraper tool | | | scraping google keyword tool | | | scraping google adwords keyword tool | | scraping using google | scraping with google docs | | | web scraping using google docs | | | scraping google with python | | | scraping google with tor | | web scraping using google docs | web scraping using google docs xpath | | scraping with google docs | web scraping with google docs | | | scraping websites with google docs | | web scraping with google docs | web scraping with google docs spreadsheets | | google web scraping | google web scraping api | | | google web scraping tool | | | google refine web scraping | | | google docs web scraping | | | google apps script web scraping | | | web scraping google search results | | | web scraping google scholar | Recursion level 2 contains 28 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | scraping google maps | scraping google maps results | | | data scraping google maps | | | screen scrape google maps | | scraping google images | python scrape google images | | scraping google scholar | scrape google scholar results | | | web scraping google scholar | | scraping google places | scrape google places free | | | php scrape google places | | scraping google news | scrape google news python | | scraping google keyword tool | scraping google adwords keyword tool | | | scrape data google keyword tool | | scraping google shopping | scrape google shopping results | | scrape google results php | scrape google search results php | | scrape google results excel | scrape google results into excel | | screen scraping google results | screen scraping google search results | | python scrape google results | python scrape google search results | | scraping google docs | web scraping google docs | | | scraping websites with google docs | | google suggest scraper php | google suggest scraper php script | | google suggest scraper script | google suggest scraper php script | | google keyword scraper tool | google keyword tool scraper v2.0 | | | google keyword tool scraper php | | | google suggest keyword suggestion scraper tool | | scraping with google docs | web scraping with google docs | | | scraping websites with google docs | | web scraping using google docs | web scraping using google docs xpath | | web scraping with google docs | web scraping with google docs spreadsheets | | google web scraping tool | google web scraping tools | Recursion level 3 contains 1 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | web scraping with google docs | web scraping with google docs spreadsheets |

Keyword: 'Scraping Google' Using mutation,english preference, 3 level spidering in Firefox API mode Provides double the amount of results, maybe not as relevant.

Recursion level reached: 3, Total keywords: 696 keywords, Time spent: 293 seconds Google Suggest Spider results Recursion level 0 contains 117 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | scraping google | scraping google finance | | | scraping google results | | | scraping google scholar | | | scraping google news | | | scraping google groups | | | scraping google maps | | | scraping google play | | | scraping google search results python | | | scraping google cache | | | scraping google trends | | scraping google a | scraping google adwords | | | scraping google adwords keyword tool | | | scrape google ads | | | scrape google autocomplete | | | scrape google analytics real time | | | scrape google art project | | | google scraping api | | | web scraping google app engine | | scraping google b | scrape google books | | | scrape google business listings | | | scrape google blog search | | | scrape google local business | | | bing scraping google | | scraping google c | scraping google cache | | | scrape google captcha | | | scrape google calendar | | | google chrome scraper | | | screen scraping google chrome | | | scraping google results c# | | | google content scraping | | scraping google d | scraping google docs | | | scrape data google keyword tool | | | web scraping google docs | | | scrape google finance data | | | scraping websites with google docs | | | google data scraping | | | data scraping google maps | | scraping google e | scrape emails google | | | scrape google results excel | | | web scraping google app engine | | scraping google f | scraping google finance | | | scraping from google | | | scrape google places free | | | scraping data from google maps | | | scrape google product feed | | scraping google g | scraping google groups | | | scrape google without getting banned | | scraping google i | scraping google images | | | scrape google results into excel | | | python scrape google images | | scraping google j | scraping google java | | scraping google k | scraping google keyword tool | | | scrape google keyword planner | | | scraping google adwords keyword tool | | | scrape data google keyword tool | | scraping google l | scrape google local results | | | scrape google local business | | | scrape google listings | | | scrape links google | | | scrape google business listings | | scraping google m | scraping google maps | | | scraping google maps results | | | data scraping google maps | | | screen scrape google maps | | scraping google n | scraping google news | | | scrape google news python | | | scrape google nokogiri | | | scrape google .net | | scraping google o | scrape google online | | scraping google p | scraping google play | | | scraping google places | | | scraping google plus | | | scraping google pages | | | scrape google python | | | scrape google php | | | scrape google places free | | | google scraping proxy | | | scrape google news python | | | scrape google results php | | scraping google r | scraping google results | | | scraping google ranks for fun and profit | | | scraping google results c# | | | scrape google results into excel | | | scrape google results php | | | scrape google results software | | | scrape google results excel | | | scraping google search results python | | | bing scraping google results | | | screen scraping google results | | scraping google s | scraping google scholar | | | scraping google search results | | | scraping google search results python | | | scraping google search results php | | | scraping google spreadsheet | | | scraping google shopping | | | google suggest scraper | | | scrape google shopping results | | | scrape google search results java | | | scrape google search results excel | | scraping google t | scraping google trends | | | scraping google translate | | | google scraping tool | | | scraping google keyword tool | | | scraping google with tor | | | scraping google adwords keyword tool | | scraping google u | scraping using google | | | web scraping using google docs | | scraping google w | scraping google with python | | | scraping google with tor | | | scrape google without getting banned | | | scraping with google docs | | | web scraping with google docs | | | scraping websites with google docs | | | google web scraping | | | web scraping google search results | | | web scraping google app engine | | | web scraping google scholar | Recursion level 1 contains 171 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | scraping google finance | scraping google finance | | scraping google results | scraping google results | | | scraping google results c# | | | scrape google results into excel | | | scrape google results php | | | scrape google results software | | | scrape google results excel | | | scraping google search results python | | | bing scraping google results | | | screen scraping google results | | | scraping google search results php | | scraping google scholar | scraping google scholar | | | scrape google scholar results | | | web scraping google scholar | | scraping google news | scraping google news | | | scrape google news python | | scraping google groups | scraping google groups | | scraping google maps | scraping google maps | | | scraping google maps results | | | data scraping google maps | | | screen scrape google maps | | scraping google play | scraping google play | | scraping google search results python | scraping google search results python | | scraping google cache | scraping google cache | | scraping google trends | scraping google trends | | scraping google adwords | scraping google adwords | | | scraping google adwords keyword tool | | scraping google adwords keyword tool | scraping google adwords keyword tool | | scrape google ads | scrape google ads | | scrape google autocomplete | scrape google autocomplete | | scrape google analytics real time | scrape google analytics real time | | scrape google art project | scrape google art project | | google scraping api | google scraping api | | | web scraping google api | | web scraping google app engine | web scraping google app engine | | scrape google books | scrape google books | | scrape google business listings | scrape google business listings | | scrape google blog search | scrape google blog search | | scrape google local business | scrape google local business | | bing scraping google | bing scraping google | | scrape google captcha | scrape google captcha | | scrape google calendar | scrape google calendar | | google chrome scraper | google chrome scraper | | | google chrome scraper tutorial | | | how to use google chrome scraper | | screen scraping google chrome | screen scraping google chrome | | scraping google results c# | scraping google results c# | | google content scraping | google content scraping | | scraping google docs | scraping google docs | | | web scraping google docs | | | scraping websites with google docs | | scrape data google keyword tool | scrape data google keyword tool | | web scraping google docs | web scraping google docs | | scrape google finance data | scrape google finance data | | scraping websites with google docs | scraping websites with google docs | | google data scraping | google data scraping | | | google chrome data scraping | | | data scraping google maps | | data scraping google maps | data scraping google maps | | scrape emails google | scrape emails google | | | scrape emails from google search | | scrape google results excel | scrape google results excel | | | scrape google results into excel | | scraping from google | scraping from google | | | scraping data from google maps | | | scraping google maps | | | scraping google images | | | scraping google finance | | | scraping google play | | | scraping google scholar | | | scraping google places | | | scraping google groups | | | scraping google translate | | scrape google places free | scrape google places free | | scraping data from google maps | scraping data from google maps | | scrape google product feed | scrape google product feed | | scrape google without getting banned | scrape google without getting banned | | scraping google images | scraping google images | | | python scrape google images | | scrape google results into excel | scrape google results into excel | | python scrape google images | python scrape google images | | scraping google java | scraping google java | | scraping google keyword tool | scraping google keyword tool | | | scraping google adwords keyword tool | | | scrape data google keyword tool | | scrape google keyword planner | scrape google keyword planner | | scrape google local results | scrape google local results | | scrape google listings | scrape google listings | | | scrape google business listings | | scrape links google | scrape links google | | scraping google maps results | scraping google maps results | | screen scrape google maps | screen scrape google maps | | scrape google news python | scrape google news python | | scrape google nokogiri | scrape google nokogiri | | scrape google .net | scrape google .net | | scrape google online | scrape google online | | | scrape google search results online | | scraping google places | scraping google places | | | scrape google places free | | | php scrape google places | | scraping google plus | scraping google plus | | scraping google pages | scraping google pages | | scrape google python | scrape google python | | | scrape google news python | | | scrape google search results python | | | python scrape google finance | | scrape google php | scrape google php | | | scrape google results php | | | scrape google search results php | | | php scrape google places | | google scraping proxy | google scraping proxy | | scrape google results php | scrape google results php | | | scrape google search results php | | scraping google ranks for fun and profit | scraping google ranks for fun and profit | | scrape google results software | scrape google results software | | bing scraping google results | bing scraping google results | | screen scraping google results | screen scraping google results | | | screen scraping google search results | | scraping google search results | scraping google search results | | | scraping google search results python | | | scraping google search results php | | | scrape google search results java | | | scrape google search results excel | | | scrape google search results online | | | web scraping google search results | | | screen scraping google search results | | scraping google search results php | scraping google search results php | | scraping google spreadsheet | scraping google spreadsheet | | | scraping google docs | | scraping google shopping | scraping google shopping | | | scrape google shopping results | | google suggest scraper | google suggest scraper | | | google suggest scraper php | | | google suggest scraper script | | | google suggest scraper php script | | | google suggest keyword suggestion scraper tool | | scrape google shopping results | scrape google shopping results | | scrape google search results java | scrape google search results java | | scrape google search results excel | scrape google search results excel | | scraping google translate | scraping google translate | | google scraping tool | google scraping tool | | | google suggest scraper tool | | | google keyword scraper tool | | | google places scraper tool | | | google url scraper tool | | | scraping google keyword tool | | | scraping google adwords keyword tool | | scraping google with tor | scraping google with tor | | scraping using google | scraping using google | | | scraping with google docs | | | web scraping using google docs | | | scraping google with python | | | scraping google with tor | | web scraping using google docs | web scraping using google docs xpath | | | web scraping using google docs | | scraping google with python | scraping google with python | | scraping with google docs | scraping with google docs | | | web scraping with google docs | | | scraping websites with google docs | | web scraping with google docs | web scraping with google docs | | | web scraping with google docs spreadsheets | | google web scraping | google web scraping | | | google web scraping api | | | google web scraping tool | | | google refine web scraping | | | google docs web scraping | | | google apps script web scraping | | | web scraping google search results | | | web scraping google scholar | | web scraping google search results | web scraping google search results | | web scraping google scholar | web scraping google scholar | Recursion level 2 contains 203 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | scraping google finance | scraping google finance | | scraping google results | scraping google results | | | scraping google results c# | | | scrape google results into excel | | | scrape google results php | | | scrape google results software | | | scrape google results excel | | | scraping google search results python | | | bing scraping google results | | | screen scraping google results | | | scraping google search results php | | scraping google results c# | scraping google results c# | | scrape google results into excel | scrape google results into excel | | scrape google results php | scrape google results php | | | scrape google search results php | | scrape google results software | scrape google results software | | scrape google results excel | scrape google results excel | | | scrape google results into excel | | scraping google search results python | scraping google search results python | | bing scraping google results | bing scraping google results | | screen scraping google results | screen scraping google results | | | screen scraping google search results | | scraping google search results php | scraping google search results php | | scraping google scholar | scraping google scholar | | | scrape google scholar results | | | web scraping google scholar | | scrape google scholar results | scrape google scholar results | | web scraping google scholar | web scraping google scholar | | scraping google news | scraping google news | | | scrape google news python | | scrape google news python | scrape google news python | | scraping google groups | scraping google groups | | scraping google maps | scraping google maps | | | scraping google maps results | | | data scraping google maps | | | screen scrape google maps | | scraping google maps results | scraping google maps results | | data scraping google maps | data scraping google maps | | screen scrape google maps | screen scrape google maps | | scraping google play | scraping google play | | scraping google cache | scraping google cache | | scraping google trends | scraping google trends | | scraping google adwords | scraping google adwords | | | scraping google adwords keyword tool | | scraping google adwords keyword tool | scraping google adwords keyword tool | | scrape google ads | scrape google ads | | scrape google autocomplete | scrape google autocomplete | | scrape google analytics real time | scrape google analytics real time | | scrape google art project | scrape google art project | | google scraping api | google scraping api | | | web scraping google api | | web scraping google api | web scraping google api | | web scraping google app engine | web scraping google app engine | | scrape google books | scrape google books | | scrape google business listings | scrape google business listings | | scrape google blog search | scrape google blog search | | scrape google local business | scrape google local business | | bing scraping google | bing scraping google | | scrape google captcha | scrape google captcha | | scrape google calendar | scrape google calendar | | google chrome scraper | google chrome scraper | | | google chrome scraper tutorial | | | how to use google chrome scraper | | google chrome scraper tutorial | google chrome scraper tutorial | | how to use google chrome scraper | how to use google chrome scraper | | screen scraping google chrome | screen scraping google chrome | | google content scraping | google content scraping | | scraping google docs | scraping google docs | | | web scraping google docs | | | scraping websites with google docs | | web scraping google docs | web scraping google docs | | scraping websites with google docs | scraping websites with google docs | | scrape data google keyword tool | scrape data google keyword tool | | scrape google finance data | scrape google finance data | | google data scraping | google data scraping | | | google chrome data scraping | | | data scraping google maps | | google chrome data scraping | google chrome data scraping | | scrape emails google | scrape emails google | | | scrape emails from google search | | scrape emails from google search | scrape emails from google search | | scraping from google | scraping from google | | | scraping data from google maps | | | scraping google maps | | | scraping google images | | | scraping google finance | | | scraping google play | | | scraping google scholar | | | scraping google places | | | scraping google groups | | | scraping google translate | | scraping data from google maps | scraping data from google maps | | scraping google images | scraping google images | | | python scrape google images | | scraping google places | scraping google places | | | scrape google places free | | | php scrape google places | | scraping google translate | scraping google translate | | scrape google places free | scrape google places free | | scrape google product feed | scrape google product feed | | scrape google without getting banned | scrape google without getting banned | | python scrape google images | python scrape google images | | scraping google java | scraping google java | | scraping google keyword tool | scraping google keyword tool | | | scraping google adwords keyword tool | | | scrape data google keyword tool | | scrape google keyword planner | scrape google keyword planner | | scrape google local results | scrape google local results | | scrape google listings | scrape google listings | | | scrape google business listings | | scrape links google | scrape links google | | scrape google nokogiri | scrape google nokogiri | | scrape google .net | scrape google .net | | scrape google online | scrape google online | | | scrape google search results online | | scrape google search results online | scrape google search results online | | php scrape google places | php scrape google places | | scraping google plus | scraping google plus | | scraping google pages | scraping google pages | | scrape google python | scrape google python | | | scrape google news python | | | scrape google search results python | | | python scrape google finance | | scrape google search results python | scrape google search results python | | python scrape google finance | python scrape google finance | | scrape google php | scrape google php | | | scrape google results php | | | scrape google search results php | | | php scrape google places | | scrape google search results php | scrape google search results php | | google scraping proxy | google scraping proxy | | scraping google ranks for fun and profit | scraping google ranks for fun and profit | | screen scraping google search results | screen scraping google search results | | scraping google search results | scraping google search results | | | scraping google search results python | | | scraping google search results php | | | scrape google search results java | | | scrape google search results excel | | | scrape google search results online | | | web scraping google search results | | | screen scraping google search results | | scrape google search results java | scrape google search results java | | scrape google search results excel | scrape google search results excel | | web scraping google search results | web scraping google search results | | scraping google spreadsheet | scraping google spreadsheet | | | scraping google docs | | scraping google shopping | scraping google shopping | | | scrape google shopping results | | scrape google shopping results | scrape google shopping results | | google suggest scraper | google suggest scraper | | | google suggest scraper php | | | google suggest scraper script | | | google suggest scraper php script | | | google suggest keyword suggestion scraper tool | | google suggest scraper php | google suggest scraper php | | | google suggest scraper php script | | google suggest scraper script | google suggest scraper script | | | google suggest scraper php script | | google suggest scraper php script | google suggest scraper php script | | google suggest keyword suggestion scraper tool | google suggest keyword suggestion scraper tool | | google scraping tool | google scraping tool | | | google suggest scraper tool | | | google keyword scraper tool | | | google places scraper tool | | | google url scraper tool | | | scraping google keyword tool | | | scraping google adwords keyword tool | | google suggest scraper tool | google suggest scraper tool | | google keyword scraper tool | google keyword scraper tool | | | google keyword tool scraper v2.0 | | | google keyword tool scraper php | | | google suggest keyword suggestion scraper tool | | google places scraper tool | google places scraper tool | | google url scraper tool | google url scraper tool | | scraping google with tor | scraping google with tor | | scraping using google | scraping using google | | | scraping with google docs | | | web scraping using google docs | | | scraping google with python | | | scraping google with tor | | scraping with google docs | scraping with google docs | | | web scraping with google docs | | | scraping websites with google docs | | web scraping using google docs | web scraping using google docs xpath | | | web scraping using google docs | | scraping google with python | scraping google with python | | web scraping using google docs xpath | web scraping using google docs xpath | | web scraping with google docs | web scraping with google docs | | | web scraping with google docs spreadsheets | | web scraping with google docs spreadsheets | web scraping with google docs spreadsheets | | google web scraping | google web scraping | | | google web scraping api | | | google web scraping tool | | | google refine web scraping | | | google docs web scraping | | | google apps script web scraping | | | web scraping google search results | | | web scraping google scholar | | google web scraping api | google web scraping api | | google web scraping tool | google web scraping tools | | google refine web scraping | google refine web scraping | | google docs web scraping | google docs web scraping | | google apps script web scraping | google apps script web scraping | Recursion level 3 contains 205 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | scraping google finance | scraping google finance | | scraping google results | scraping google results | | | scraping google results c# | | | scrape google results into excel | | | scrape google results php | | | scrape google results software | | | scrape google results excel | | | scraping google search results python | | | bing scraping google results | | | screen scraping google results | | | scraping google search results php | | scraping google results c# | scraping google results c# | | scrape google results into excel | scrape google results into excel | | scrape google results php | scrape google results php | | | scrape google search results php | | scrape google results software | scrape google results software | | scrape google results excel | scrape google results excel | | | scrape google results into excel | | scraping google search results python | scraping google search results python | | bing scraping google results | bing scraping google results | | screen scraping google results | screen scraping google results | | | screen scraping google search results | | scraping google search results php | scraping google search results php | | scrape google search results php | scrape google search results php | | screen scraping google search results | screen scraping google search results | | scraping google scholar | scraping google scholar | | | scrape google scholar results | | | web scraping google scholar | | scrape google scholar results | scrape google scholar results | | web scraping google scholar | web scraping google scholar | | scraping google news | scraping google news | | | scrape google news python | | scrape google news python | scrape google news python | | scraping google groups | scraping google groups | | scraping google maps | scraping google maps | | | scraping google maps results | | | data scraping google maps | | | screen scrape google maps | | scraping google maps results | scraping google maps results | | data scraping google maps | data scraping google maps | | screen scrape google maps | screen scrape google maps | | scraping google play | scraping google play | | scraping google cache | scraping google cache | | scraping google trends | scraping google trends | | scraping google adwords | scraping google adwords | | | scraping google adwords keyword tool | | scraping google adwords keyword tool | scraping google adwords keyword tool | | scrape google ads | scrape google ads | | scrape google autocomplete | scrape google autocomplete | | scrape google analytics real time | scrape google analytics real time | | scrape google art project | scrape google art project | | google scraping api | google scraping api | | | web scraping google api | | web scraping google api | web scraping google api | | web scraping google app engine | web scraping google app engine | | scrape google books | scrape google books | | scrape google business listings | scrape google business listings | | scrape google blog search | scrape google blog search | | scrape google local business | scrape google local business | | bing scraping google | bing scraping google | | scrape google captcha | scrape google captcha | | scrape google calendar | scrape google calendar | | google chrome scraper | google chrome scraper | | | google chrome scraper tutorial | | | how to use google chrome scraper | | google chrome scraper tutorial | google chrome scraper tutorial | | how to use google chrome scraper | how to use google chrome scraper | | screen scraping google chrome | screen scraping google chrome | | google content scraping | google content scraping | | scraping google docs | scraping google docs | | | web scraping google docs | | | scraping websites with google docs | | web scraping google docs | web scraping google docs | | scraping websites with google docs | scraping websites with google docs | | scrape data google keyword tool | scrape data google keyword tool | | scrape google finance data | scrape google finance data | | google data scraping | google data scraping | | | google chrome data scraping | | | data scraping google maps | | google chrome data scraping | google chrome data scraping | | scrape emails google | scrape emails google | | | scrape emails from google search | | scrape emails from google search | scrape emails from google search | | scraping from google | scraping from google | | | scraping data from google maps | | | scraping google maps | | | scraping google images | | | scraping google finance | | | scraping google play | | | scraping google scholar | | | scraping google places | | | scraping google groups | | | scraping google translate | | scraping data from google maps | scraping data from google maps | | scraping google images | scraping google images | | | python scrape google images | | scraping google places | scraping google places | | | scrape google places free | | | php scrape google places | | scraping google translate | scraping google translate | | python scrape google images | python scrape google images | | scrape google places free | scrape google places free | | php scrape google places | php scrape google places | | scrape google product feed | scrape google product feed | | scrape google without getting banned | scrape google without getting banned | | scraping google java | scraping google java | | scraping google keyword tool | scraping google keyword tool | | | scraping google adwords keyword tool | | | scrape data google keyword tool | | scrape google keyword planner | scrape google keyword planner | | scrape google local results | scrape google local results | | scrape google listings | scrape google listings | | | scrape google business listings | | scrape links google | scrape links google | | scrape google nokogiri | scrape google nokogiri | | scrape google .net | scrape google .net | | scrape google online | scrape google online | | | scrape google search results online | | scrape google search results online | scrape google search results online | | scraping google plus | scraping google plus | | scraping google pages | scraping google pages | | scrape google python | scrape google python | | | scrape google news python | | | scrape google search results python | | | python scrape google finance | | scrape google search results python | scrape google search results python | | python scrape google finance | python scrape google finance | | scrape google php | scrape google php | | | scrape google results php | | | scrape google search results php | | | php scrape google places | | google scraping proxy | google scraping proxy | | scraping google ranks for fun and profit | scraping google ranks for fun and profit | | scraping google search results | scraping google search results | | | scraping google search results python | | | scraping google search results php | | | scrape google search results java | | | scrape google search results excel | | | scrape google search results online | | | web scraping google search results | | | screen scraping google search results | | scrape google search results java | scrape google search results java | | scrape google search results excel | scrape google search results excel | | web scraping google search results | web scraping google search results | | scraping google spreadsheet | scraping google spreadsheet | | | scraping google docs | | scraping google shopping | scraping google shopping | | | scrape google shopping results | | scrape google shopping results | scrape google shopping results | | google suggest scraper | google suggest scraper | | | google suggest scraper php | | | google suggest scraper script | | | google suggest scraper php script | | | google suggest keyword suggestion scraper tool | | google suggest scraper php | google suggest scraper php | | | google suggest scraper php script | | google suggest scraper script | google suggest scraper script | | | google suggest scraper php script | | google suggest scraper php script | google suggest scraper php script | | google suggest keyword suggestion scraper tool | google suggest keyword suggestion scraper tool | | google scraping tool | google scraping tool | | | google suggest scraper tool | | | google keyword scraper tool | | | google places scraper tool | | | google url scraper tool | | | scraping google keyword tool | | | scraping google adwords keyword tool | | google suggest scraper tool | google suggest scraper tool | | google keyword scraper tool | google keyword scraper tool | | | google keyword tool scraper v2.0 | | | google keyword tool scraper php | | | google suggest keyword suggestion scraper tool | | google places scraper tool | google places scraper tool | | google url scraper tool | google url scraper tool | | google keyword tool scraper php | google keyword tool scraper php | | scraping google with tor | scraping google with tor | | scraping using google | scraping using google | | | scraping with google docs | | | web scraping using google docs | | | scraping google with python | | | scraping google with tor | | scraping with google docs | scraping with google docs | | | web scraping with google docs | | | scraping websites with google docs | | web scraping using google docs | web scraping using google docs xpath | | | web scraping using google docs | | scraping google with python | scraping google with python | | web scraping with google docs | web scraping with google docs | | | web scraping with google docs spreadsheets | | web scraping using google docs xpath | web scraping using google docs xpath | | web scraping with google docs spreadsheets | web scraping with google docs spreadsheets | | google web scraping | google web scraping | | | google web scraping api | | | google web scraping tool | | | google refine web scraping | | | google docs web scraping | | | google apps script web scraping | | | web scraping google search results | | | web scraping google scholar | | google web scraping api | google web scraping api | | google web scraping tool | google web scraping tools | | google refine web scraping | google refine web scraping | | google docs web scraping | google docs web scraping | | google apps script web scraping | google apps script web scraping | | google web scraping tools | google web scraping tools |

Keyword: 'crimea' Using keyword mutation, no spidering in Firefox API mode

The first 3 recursion levels regarding the keyword "crimea" Recursion level reached: 3, Total keywords: 747 keywords, Time spent: 371 seconds Google Suggest Spider results Recursion level 0 contains 10 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | crimea | crimea | | | crimean war | | | crimea map | | | crimean tatar | | | crimea news | | | crimea history | | | crimea pronunciation | | | crimean crisis | | | crimea referendum | | | crimea river | Recursion level 1 contains 73 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | crimea | crimea | | | crimean war | | | crimea map | | | crimean tatar | | | crimea news | | | crimea history | | | crimea pronunciation | | | crimean crisis | | | crimea referendum | | | crimea river | | crimean war | crimean war | | | crimean war map | | | crimean war photos | | | crimean war ap euro | | | crimean war documentary | | | crimean war movies | | | crimean war quizlet | | | crimean war poem | | | crimean war light brigade | | | crimean war weapons | | crimea map | crimea map | | | crimea map english | | | crimea map russia | | | crimea map google | | | crimea map europe | | | crimea map 1854 | | | crimea mapquest | | | crimea mapa | | | crimea map of ukraine | | | crimea map image | | crimean tatar | crimean tatar | | | crimean tatar flag | | | crimean tatar deportation | | | crimean tatar news | | | crimean tatar diaspora | | | crimean tatar tv | | | crimean tatars map | | | crimean tatars protest | | | crimean tatar names | | | crimean tatars turkey | | crimea news | crimea news | | | crimea newspapers | | | crimea news cnn | | | crimea news agency | | | crimea news today | | | crimea news video | | | crimea news update | | | crimea news bbc | | | crimea news now | | | crimea news ua | | crimea history | crimea history | | | crimea history wiki | | | crimea history map | | | tatar crimea history | | | crimea pass history | | | brief history crimea | | | bbc history crimea | | | crimea street belfast history | | crimea pronunciation | crimea pronunciation | | crimean crisis | crimean crisis | | | crimean crisis airsoft | | crimea referendum | crimea referendum | | | crimea referendum results | | crimea river | crimea river | | | crimea river by justin timberlake | | | crimea river song | | | crimea river lyrics | | | crimea river ltd | | | crimea river cruises | | | crimea river map | | | spieltape - crimea river ep | | | who sang crimea river | | | michael buble crimea river | Recursion level 2 contains 203 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | crimea | crimean war | | | crimea | | | crimean tatar | | | crimean war definition | | | crimean khanate | | | crimean war causes | | | crimea vote | | | crimea river | | | crimean congo hemorrhagic fever | | | crimean war ap euro | | crimean war | crimean war | | | crimean war definition | | | crimean war causes | | | crimean war ap euro | | | crimean war timeline | | | crimean war charge of the light brigade | | | crimean war quizlet | | | crimean war battles | | | crimean war documentary | | | crimean war effects on russia | | crimea map | crimea map | | | crimea map google | | | crimea map english | | | crimea mapa | | | crimea mappa | | | balaklava crimea map | | | crimean war map | | | crimea pass map | | | yalta crimea map | | | crimean peninsula map | | crimean tatar | crimean tatar | | | crimean tatar language | | | crimean tatar bow | | | crimean tatar names | | | crimean tatars map | | | crimean tatar diaspora | | | crimean tatar flag | | | crimean tatars religion | | | crimean tatar surnames | | | crimean tatar music | | crimea news | crimea news | | | crimea newspapers | | | crimea news ua | | | crimea newsagency | | | crimea news morley | | | crimea ukraine news | | | crimea street newsagency | | | crimea latest news | | | all crimea news | | crimea history | crimea history | | | crimea history timeline | | | crimea history washington post | | | crimea history summary | | | crimea history maps | | | crimea history youtube | | | crimea history bbc | | | crimea history with ukraine | | | crimea history of conflict | | | crimea history wikipedia | | crimea pronunciation | crimea pronunciation | | | crimea pronunciation russian | | | crimea pronunciation in ukrainian | | | crimea pronunciation audio | | | crimean pronunciation | | crimean crisis | crimean crisis | | | crimean crisis timeline | | | crimean crisis milsim west | | | crimean crisis news | | | crimean crisis airsoft | | | crimean crisis analysis | | | crimean crisis map | | | crimean crisis cnn | | | crimean crisis summary | | | crimean crisis bbc | | crimea referendum | crimea referendum | | | crimea referendum results | | | crimea referendum 1991 | | | crimea referendum 1992 | | | crimea referendum question | | | crimea referendum vote | | | crimea referendum poll | | | crimea referendum march | | | crimea referendum international law | | | crimea referendum march 16 | | crimea river | crimea river | | | crimea river ukraine | | | crimea river meme | | | crimea river song | | | crimea river by justin timberlake | | | crimea river map | | | crimea river twitter | | | crimea river reddit | | | crimea river joke | | | crimea river lyrics | | crimean war map | crimean war map | | | crimean war map english | | | crimean war map europe | | | sevastopol crimean war map | | | crimean war battles map | | | crimean war location map | | | crimean war mind map | | | florence nightingale crimean war map | | | ottoman empire crimean war map | | crimean war photos | crimean war photos | | | crimean war photos florence nightingale | | | crimean war photo cannonballs | | | crimean war photo valley of the shadow of death | | | crimean war photo errol morris | | | crimean war photo shadow of death | | | crimean war photo gallery | | | crimean war battlefield photos | | | crimean war veterans photos | | crimean war ap euro | crimean war ap euro | | | crimean war ap euro definition | | crimean war documentary | crimean war documentary | | crimean war movies | crimean war movies | | crimean war quizlet | crimean war quizlet | | | crimean war ap euro quizlet | | | the crimean war involved quizlet | | crimean war poem | crimean war poem | | | crimean war poem about the charge of the light bri | | crimean war light brigade | crimean war light brigade | | | crimean war charge of the light brigade poem | | crimean war weapons | crimean war weapons | | | crimean war weapons used | | | crimean war weapons tactics | | | crimean war weaponry | | | crimean war russian weapons | | | crimean war british weapons | | | crimean war uniforms and weapons | | crimea map english | crimea map english | | crimea map russia | crimea map russia | | | crimea map russia ukraine | | | crimea map russian | | crimea map google | crimea map google | | crimea map europe | crimea map europe | | | crimean war map europe | | | crimean peninsula map europe | | crimea map 1854 | crimea map 1854 | | crimea mapquest | crimea mapquest | | crimea mapa | crimea mapa | | | crimea mapa politico | | | crimea mapa fisico | | | península crimea mapa | | | guerra de crimea mapa | | | mapa crimea ucrania | | | yalta crimea mapa | | | crimea ubicacion mapa | | | guerra de crimea mapa conceptual | | crimea map of ukraine | crimea map of ukraine | | crimea map image | crimea map image | | crimean tatar flag | crimean tatar flag | | crimean tatar deportation | crimean tatar deportation | | crimean tatar news | crimean tatar news | | crimean tatar diaspora | crimean tatar diaspora | | crimean tatars map | crimean tatars map | | crimean tatar names | crimean tatar names | | crimean tatars turkey | crimean tatars turkey | | crimea newspapers | crimea newspapers | | | crimea newspapers in english | | crimea news cnn | crimea news cnn | | crimea news agency | crimea news agency | | crimea news ua | crimea news ua | | crimea history wiki | crimea history wiki | | crimea history map | crimea history map | | tatar crimea history | tatar crimea history | | | crimean tatar history | | crimea pass history | crimea pass history | | brief history crimea | brief history crimea | | | brief history crimean war | | bbc history crimea | bbc history crimean war | | crimea street belfast history | crimea street belfast history | | crimean crisis airsoft | crimean crisis airsoft | | crimea referendum results | crimea referendum results | | crimea river by justin timberlake | crimea river by justin timberlake | | | cry me a river by justin timberlake lyrics | | | cry me a river by justin timberlake mp3 download | | | cry me a river by justin timberlake free mp3 downl | | | cry me a river by justin timberlake meaning | | | cry me a river by justin timberlake about britney | | | cry me a river by justin timberlake chords | | | cry me a river song by justin timberlake | | | cry me a river justin timberlake tumblr | | | cry me a river justin timberlake piano sheet music | | crimea river song | crimea river song | | crimea river lyrics | crimea river lyrics | | crimea river ltd | crimea river ltd | | crimea river cruises | crimea river cruises | | crimea river map | crimea river map | | spieltape - crimea river ep | spieltape - crimea river ep | | | spieltape – crimea river ep mood 114 | | who sang crimea river | who sang crimea river | | | who sings crimea river | | michael buble crimea river | michael buble crimea river | | | michael buble cry me a river | | | michael buble cry me a river lyrics | | | michael buble cry me a river mp3 | | | michael buble cry me a river chords | | | michael buble cry me a river mp3 download | | | michael buble cry me a river karaoke | | | michael buble cry me a river official video | | | michael buble cry me a river instrumental | | | michael buble cry me a river sheet music | Recursion level 3 contains 461 keywords: | Keyword | Suggests | | -------------------------------------------------- | -------------------------------------------------- | | crimean war | crimean war | | | crimean war definition | | | crimean war causes | | | crimean war ap euro | | | crimean war timeline | | | crimean war charge of the light brigade | | | crimean war quizlet | | | crimean war battles | | | crimean war documentary | | | crimean war effects on russia | | crimea | crimean war | | | crimea | | | crimean tatar | | | crimean war definition | | | crimean khanate | | | crimean war causes | | | crimea vote | | | crimea river | | | crimean congo hemorrhagic fever | | | crimean war ap euro | | crimean tatar | crimean tatar | | | crimean tatar language | | | crimean tatar bow | | | crimean tatar names | | | crimean tatars map | | | crimean tatar diaspora | | | crimean tatar flag | | | crimean tatars religion | | | crimean tatar surnames | | | crimean tatar music | | crimean war definition | crimean war definition | | | crimean war definition quizlet | | crimean khanate | crimean khanate | | | crimean khanate mount and blade | | | crimean khanate empire total war | | | crimean khanate flag | | | crimean khanate units | | | crimean khanate map | | | crimean khanate population | | | crimean khanate napoleon total war | | | crimean khanate coins | | | crimean khanate slave trade | | crimean war causes | crimean war causes and effects | | | crimean war causes | | | crimean war causes and results | | | crimean war causes timeline | | | crimean war death causes | | | crimean war main causes | | | crimean war long term causes | | | the crimean war general causes | | | crimean war causes and outcomes | | crimea vote | crimea vote | | | crimea vote march 16 | | | crimea vote to secede | | | crimea vote for independence | | | crimea votes to russia | | | crimea vote on joining russia | | | crimea voted to secede from ukraine | | | crimea votes to be russian | | | crimea votes to join russian federation | | | crimea vote sunday | | crimea river | crimea river | | | crimea river ukraine | | | crimea river meme | | | crimea river song | | | crimea river by justin timberlake | | | crimea river map | | | crimea river twitter | | | crimea river reddit | | | crimea river joke | | | crimea river lyrics | | crimean congo hemorrhagic fever | crimean congo hemorrhagic fever | | | crimean congo hemorrhagic fever cdc | | | crimean congo hemorrhagic fever symptoms | | | crimean congo hemorrhagic fever in india | | | crimean congo hemorrhagic fever virus structure | | | crimean congo hemorrhagic fever powerpoint present | | | crimean congo hemorrhagic fever pdf | | | crimean congo hemorrhagic fever prevention | | | crimean congo hemorrhagic fever vaccine | | | crimean congo hemorrhagic fever ppt | | crimean war ap euro | crimean war ap euro | | | crimean war ap euro definition | | crimean war timeline | crimean war timeline | | | crimean war battles timeline | | | crimean war causes timeline | | | crimean war key events timeline | | crimean war charge of the light brigade | crimean war charge of the light brigade | | | crimean war charge of the light brigade poem | | | the battle of balaclava crimean war charge of the | | | charge of the light brigade - the animated crimean | | | 1854 – the battle of balaclava during the crimea | | crimean war quizlet | crimean war quizlet | | | crimean war ap euro quizlet | | | the crimean war involved quizlet | | crimean war battles | crimean war battles | | | crimean war battles timeline | | | crimean war battles map | | | crimean war battle of balaclava | | | crimean war battle 1854 | | | crimean war battle of alma | | | crimean war battle of inkerman | | | crimean war battle photos | | | crimean war battle of sinope | | | crimean war naval battles | | crimean war documentary | crimean war documentary | | crimean war effects on russia | crimean war effects on russia | | | crimean war consequences russia | | crimea map | crimea map | | | crimea map english | | | crimea map russia | | | crimea map google | | | crimea map europe | | | crimea map 1854 | | | crimea mapquest | | | crimea mapa | | | crimea map of ukraine | | | crimea map image | | crimea map google | crimea map google | | crimea map english | crimea map english | | crimea mapa | crimea mapa | | | crimea mapa fisico | | | península crimea mapa | | | guerra de crimea mapa | | | mapa crimea ucrania | | | yalta crimea mapa | | | crimea ubicacion mapa | | | guerra de crimea mapa conceptual | | crimea mappa | crimea mappa | | | mappa crimea ucraina | | | guerra di crimea mappa concettuale | | | guerra di crimea mappa | | balaklava crimea map | balaklava crimea map | | crimean war map | crimean war map | | | crimean war map english | | | crimean war map europe | | | sevastopol crimean war map | | | crimean war battles map | | | crimean war location map | | | crimean war mind map | | | florence nightingale crimean war map | | | ottoman empire crimean war map | | crimea pass map | crimea pass map | | yalta crimea map | yalta crimea map | | | yalta crimea mapa | | crimean peninsula map | crimean peninsula map | | | crimean peninsula map europe | | | crimean peninsula world map | | | crimean peninsula ukraine map | | | crimean peninsula location on map | | | peninsula crimea mapa | | crimean tatar language | crimean tatar language | | | learn crimean tatar language | | crimean tatar bow | crimean tatar bow | | crimean tatar names | crimean tatar names | | crimean tatars map | crimean tatars map | | crimean tatar diaspora | crimean tatar diaspora | | crimean tatar flag | crimean tatar flag | | crimean tatars religion | crimean tatars religion | | crimean tatar surnames | crimean tatar surnames | | crimean tatar music | crimean tatar music | | crimea news | crimea news | | | crimea newspapers | | | crimea news ua | | | crimea newsagency | | | crimea news morley | | | crimea ukraine news | | | crimea street newsagency | | | crimea latest news | | | all crimea news | | crimea newspapers | crimea newspapers | | crimea news ua | crimea news ua | | crimea newsagency | crimea newsagency morley | | | crimea street newsagency | | crimea news morley | crimea news morley | | crimea ukraine news | crimea ukraine news | | crimea street newsagency | crimea street newsagency | | crimea latest news | crimea latest news | | all crimea news | all crimea news | | | news all crimea net | | crimea history | crimea history | | | crimea history wiki | | | crimea history map | | | tatar crimea history | | | crimea pass history | | | brief history crimea | | | bbc history crimea | | | crimea street belfast history | | crimea history timeline | crimean war history timeline | | crimea history maps | crimea history map | | crimea history wikipedia | crimea history wiki | | crimea pronunciation | crimea pronunciation | | crimea pronunciation audio | crimea pronunciation audio | | crimean pronunciation | crimean pronunciation | | | pronunciation crimean war | | crimean crisis | crimean crisis | | | crimean crisis airsoft | | crimean crisis milsim west | crimean crisis milsim west | | crimean crisis airsoft | crimean crisis airsoft | | crimean crisis map | crimean crisis map | | crimean crisis cnn | crimean crisis cnn | | crimean crisis summary | crimean crisis summary | | crimean crisis bbc | crimean crisis bbc | | crimea referendum | crimea referendum | | | crimea referendum results | | | crimea referendum 1991 | | | crimea referendum 1992 | | | crimea referendum question | | | crimea referendum vote | | | crimea referendum poll | | | crimea referendum march | | | crimea referendum international law | | | crimea referendum march 16 | | crimea referendum results | crimea referendum results | | crimea referendum poll | crimea referendum poll | | crimea referendum march | crimea referendum march | | | crimea referendum march 16 | | | crimea referendum march 30 | | | crimea referendum march 2014 | | crimea referendum international law | crimea referendum international law | | crimea referendum march 16 | crimea referendum march 16 | | crimea river ukraine | crimea river ukraine | | | crimea river ukraine joke | | crimea river song | crimea river song | | crimea river by justin timberlake | crimea river by justin timberlake | | | cry me a river by justin timberlake lyrics | | | cry me a river by justin timberlake mp3 download | | | cry me a river by justin timberlake free mp3 downl | | | cry me a river by justin timberlake meaning | | | cry me a river by justin timberlake about britney | | | cry me a river by justin timberlake chords | | | cry me a river song by justin timberlake | | | cry me a river justin timberlake tumblr | | | cry me a river justin timberlake piano sheet music | | crimea river map | crimea river map | | crimea river joke | crimea river joke | | | crimea river joke putin | | crimea river lyrics | crimea river lyrics | | crimean war map english | crimean war map english | | crimean war map europe | crimean war map europe | | sevastopol crimean war map | sevastopol crimean war map | | crimean war battles map | crimean war battles map | | crimean war location map | crimean war location map | | crimean war mind map | crimean war mind map | | florence nightingale crimean war map | florence nightingale crimean war map | | ottoman empire crimean war map | ottoman empire crimean war map | | crimean war photos | crimean war photos | | | crimean war photos florence nightingale | | | crimean war photo cannonballs | | | crimean war photo valley of the shadow of death | | | crimean war photo errol morris | | | crimean war photo shadow of death | | | crimean war photo gallery | | | crimean war battlefield photos | | | crimean war veterans photos | | crimean war photos florence nightingale | crimean war photos florence nightingale | | crimean war photo cannonballs | crimean war photo cannonballs | | | crimean war photograph cannonball | | crimean war photo valley of the shadow of death | crimean war photo valley of the shadow of death | | crimean war photo errol morris | crimean war photo errol morris | | | crimean war photographs errol morris | | crimean war photo shadow of death | crimean war photo shadow of death | | | crimean war photo valley of the shadow of death | | crimean war photo gallery | crimean war photo gallery | | | crimean war images pictures | | crimean war battlefield photos | crimean war battlefield photos | | | crimean war battle photos | | crimean war veterans photos | crimean war veterans photos | | crimean war movies | crimean war movies | | crimean war ap euro quizlet | crimean war ap euro quizlet | | the crimean war involved quizlet | the crimean war involved quizlet | | | the crimean war quizlet | | crimean war poem | crimean war poem | | | crimean war poem about the charge of the light bri | | crimean war poem about the charge of the light bri | crimean war poem about the charge of the light bri | | crimean war light brigade | crimean war light brigade | | | crimean war charge of the light brigade poem | | crimean war charge of the light brigade poem | crimean war charge of the light brigade poem | | crimean war weapons | crimean war weapons | | | crimean war weapons used | | | crimean war weapons tactics | | | crimean war weaponry | | | crimean war russian weapons | | | crimean war british weapons | | | crimean war uniforms and weapons | | crimean war weapons used | crimean war weapons used | | crimean war weapons tactics | crimean war weapons tactics | | crimean war weaponry | crimean war weaponry | | | crimean war weapons | | | crimean war weapons used | | | crimean war weapons tactics | | crimean war russian weapons | crimean war russian weapons | | crimean war british weapons | crimean war british weapons | | | crimean war british rifle | | crimean war uniforms and weapons | crimean war uniforms and weapons | | crimea map russia | crimea russia map | | crimea map russian | crimea russia map | | crimea map europe | crimea map europe | | | crimean war map europe | | | crimean peninsula map europe | | crimean peninsula map europe | crimean peninsula map europe | | crimea map 1854 | crimea map 1854 | | crimea mapquest | crimea mapquest | | crimea mapa politico | crimea mapa politico | | | mapa politico crimea | | crimea mapa fisico | crimea mapa fisico | | | peninsula de crimea mapa fisico | | península crimea mapa | península crimea mapa | | | peninsula crimea mapa | | guerra de crimea mapa | guerra de crimea mapas | | | guerra de crimea mapa conceptual | | mapa crimea ucrania | mapa crimea ucrania | | yalta crimea mapa | yalta crimea mapa | | crimea ubicacion mapa | crimea ubicacion mapa | | | crimea ubicacion geografica | | guerra de crimea mapa conceptual | guerra de crimea mapa conceptual | | crimea map of ukraine | crimea map ukraine | | crimean tatar deportation | crimean tatar deportation | | crimean tatar news | crimean tatar news | | crimean tatars turkey | crimean tatars turkey | | crimea news agency | crimea newsagency | | | crimea newsagency morley | | | crimean news agency | | crimea history wiki | crimea history wiki | | crimea history map | crimea history map | | tatar crimea history | tatar crimea history | | | crimean tatar history | | crimean tatar history | crimean tatar history | | | tatar crimea history | | crimea pass history | crimea pass history | | brief history crimea | brief history crimea | | | brief history crimean war | | brief history crimean war | brief history crimean war | | | short history of crimean war | | bbc history crimean war | bbc history crimean war | | crimea street belfast history | crimea street belfast history | | cry me a river by justin timberlake lyrics | cry me a river by justin timberlake lyrics | | | cry me a river justin timberlake lyrics meaning | | | cry me a river justin timberlake lyrics youtube | | | cry me a river justin timberlake lyrics chords | | | cry me a river justin timberlake lyrics wiki | | | cry me a river justin timberlake lyrics on screen | | | cry me a river justin timberlake song lyrics | | | cry me a river justin timberlake remix lyrics | | | cry me a river lyrics justin timberlake mp3 downlo | | | cry me a river lyrics justin timberlake feat 50 ce | | cry me a river by justin timberlake mp3 download | cry me a river by justin timberlake mp3 download | | | cry me a river by justin timberlake free mp3 downl | | | cry me a river justin timberlake ft 50 cent downlo | | | justin timberlake cry me a river mp3 download bee | | | justin timberlake cry me a river mp3 download zipp | | | justin timberlake cry me a river mp3 download 320k | | | justin timberlake cry me a river remix mp3 downloa | | | justin timberlake cry me a river instrumental mp3 | | cry me a river by justin timberlake free mp3 downl | cry me a river by justin timberlake free mp3 downl | | | justin timberlake cry me a river free mp3 download | | | justin timberlake cry me a river free mp3 download | | | justin timberlake cry me a river remix free mp3 do | | cry me a river by justin timberlake meaning | cry me a river by justin timberlake meaning | | | cry me a river lyrics justin timberlake meaning | | | cry me a river justin timberlake song meaning | | cry me a river by justin timberlake about britney | cry me a river by justin timberlake about britney | | | justin timberlake cry me a river britney spears ev | | | justin timberlake cry me a river britney spears re | | | did justin timberlake wrote cry me a river about b | | | justin timberlake admits cry me a river is about b | | | cry me a river justin timberlake pour britney spea | | | justin timberlake cry me a river for britney spear | | cry me a river by justin timberlake chords | cry me a river by justin timberlake chords | | | cry me a river justin timberlake chords piano | | | cry me a river justin timberlake chords no capo | | | cry me a river chords justin timberlake tabs | | | cry me a river justin timberlake tab | | | cry me a river justin timberlake ukulele chords | | | cry me a river justin timberlake acoustic chords | | | cry me a river justin timberlake guitar tabs | | | cry me a river justin timberlake bass tab | | cry me a river song by justin timberlake | cry me a river song by justin timberlake | | | cry me a river song lyrics by justin timberlake | | | download cry me a river song by justin timberlake | | | the song cry me a river by justin timberlake was o | | | cry me a river justin timberlake song meaning | | | songs like cry me a river by justin timberlake | | | justin timberlake cry me a river song online | | | justin timberlake cry me a river song text | | | cry me a river- justin timberlake songstraducidas | | cry me a river justin timberlake tumblr | cry me a river justin timberlake tumblr | | | cry me a river justin timberlake audio tumblr | | cry me a river justin timberlake piano sheet music | cry me a river justin timberlake piano sheet music | | | cry me a river justin timberlake piano sheet music | | crimea river ltd | crimea river ltd | | crimea river cruises | crimea river cruises | | spieltape - crimea river ep | spieltape - crimea river ep | | | spieltape – crimea river ep mood 114 | | who sang crimea river | who sang crimea river | | | who sings crimea river | | who sings crimea river | who sings crimea river | | | who sang crimea river | | michael buble crimea river | michael buble crimea river | | | michael buble cry me a river | | | michael buble cry me a river lyrics | | | michael buble cry me a river mp3 | | | michael buble cry me a river chords | | | michael buble cry me a river mp3 download | | | michael buble cry me a river karaoke | | | michael buble cry me a river official video | | | michael buble cry me a river instrumental | | | michael buble cry me a river sheet music | | michael buble cry me a river | michael buble cry me a river | | | michael buble cry me a river lyrics | | | michael buble cry me a river mp3 | | | michael buble cry me a river chords | | | michael buble cry me a river live | | | michael buble cry me a river sheet music | | | michael buble cry me a river instrumental | | | michael buble cry me a river album | | | michael buble cry me a river cover | | | michael buble cry me a river lyrics youtube | | michael buble cry me a river lyrics | michael buble cry me a river lyrics | | | michael buble cry me a river lyrics youtube | | | michael buble cry me a river lyrics az | | | michael buble cry me a river lyrics on screen | | | michael buble cry me a river lyrics and song | | | michael buble cry me a river lyrics and chords | | | michael buble cry me a river lyrics übersetzung | | | michael buble cry me a river lyrics traducida | | | michael buble cry me a river lyrics traduction | | | michael bublé sings cry me a river lyrics | | michael buble cry me a river mp3 | michael buble cry me a river mp3 | | | michael buble cry me a river mp3 download free | | | michael buble cry me a river mp3 free | | | michael buble cry me a river instrumental mp3 | | | 01 michael bublé - cry me a river.mp3 | | | cry me a river lyrics michael buble mp3 | | | cry me a river michael buble karaoke mp3 | | | descargar cry me a river michael buble mp3 | | | michael buble cry me a river mp3 скачать | | | cry me a river michael buble live mp3 | | michael buble cry me a river chords | michael buble cry me a river chords | | | michael buble cry me a river chords piano | | | michael buble cry me a river tab | | | cry me a river chords michael buble free | | michael buble cry me a river mp3 download | michael buble cry me a river mp3 download | | | michael buble cry me a river mp3 download free | | michael buble cry me a river karaoke | michael buble cry me a river karaoke | | | michael buble cry me a river karaoke free | | | michael buble cry me a river karaoke download | | | michael buble cry me a river karaoke free download | | | michael buble cry me a river karaoke with lyrics | | | youtube michael buble cry me a river karaoke | | | cry me a river michael buble karaoke mp3 | | michael buble cry me a river official video | michael buble cry me a river official video | | | youtube michael buble cry me a river official vide | | | michael buble cry me a river video | | | michael buble cry me a river videos youtube | | michael buble cry me a river instrumental | michael buble cry me a river instrumental | | | michael buble cry me a river instrumental download | | | cry me a river michael buble instrumental free dow | | michael buble cry me a river sheet music | michael buble cry me a river sheet music | | | michael buble cry me a river sheet music free | | | michael buble cry me a river violin sheet music |

Google Suggest Scraping Spider PHP code

This source code is written in PHP and is ready to be used immediately. You can either make an agreement with us-proxies for IP addresses or replace the relevant parts and use your own IP solution. Before using the source code please read the license agreement. Requirements: * PHP 5.2 or higher, PHP libCURL and PHP DOM * user permissions to write at the local directory (caching) * us proxies API support (professional IP provider)

Download the source code here: scrape-google-suggest.php functions-sgs.php
scrape-google-suggest.php
<?php
    
/* License:
       Open source for private and commercial use.
       This source code is free to use and modify as long as this comment stays untouched on top.
       URL of original source code: http://scrape-google-suggest.compunect.com/
       Author of original source code: http://www.compunect.com
       Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation.
       Exceptions:
       Public redistributing modifications of this source code project is not allowed without written agreement.
       Using this work for private and commercial projects is allowed, redistributing it is not allowed without our written agreement.
       In simple words: You may power your project with this code or a customized version of it, but you may not redistribute the code. Also any legal consequences are your own problem.

       If you want to hire me for customization or a similar project please write an email to develop@compunect.com
     */
    /*
     * This scraper is meant to be run from a console (either by making it shell executable (#!) or launching it through php
     * It is not recommended to run any scraping activity through a web browser.
     * Instead of this your web script should interface through a database or other way asynchronously
     *
     * This script can be used in different modes to find keyword autocompletion and suggestions and is best suited for long-tail keywords
     * Spidering:
     * By setting a recursion spide depth higher than 0 you activate the Spider mode, that's the actual heart of this tool.
     * Recursion of 2 means that the script will get all suggests for your keyword phrase. Then it will get all suggests for all suggests results, then it will get suggests for all results of all results
     * So even a small recursion depth ($test_spider_depth) can lead to a large amount of keywords, keep that in mind before entering any larger number there.
     * A recursion of 10 leads to 10 billion keywords in an optimal case, more than what makes sense and most of them would be off topic (and repetitive)
     * A recursion of 3 already leads to up to 1000 keywords and will take its time to complete.
     * Instead of using a large recursion depth better use different keywords
     *
     * IP rotation rate: Mid term results show stable spidering is possible at a rotation rate of 100 queries per hour per IP address when rotating once after every 5 requests and keeping a delay between requests
     * It might be required to lower that rate, keep yourself updated by checking back here regularly to avoid getting blocked.
     *
     * As there is local caching it is no problem to interrupt the spider, it will continue where it was stopped
     *
     */
    /*
     * Possible uses:
     * Keyword research: this tool can easily expand keywords and find new ones. And the best: These are all keywords which are strongly organic search related!
     * Long-tail keyword research: Money can be made when it comes to phrases. Phrases are searched by people just as keywords but compared to a high quality keyword it is easy to rank for a phrase or pay for a phrase ad.
     * Event logging: The results of a country, city or public person will change over the time and reflect what people were interested and talking about. (Just think Obama,Putin,EU,terror during Iraq, Crimea, Georgia, etc)
     * News: Your news blog or website can benefit from targeting exactly what people are most interested in. Using this spider you can find thousands of highly relevant phrases related to a particular news topic.
     * Research: From behaviour research, to your own Google Zeitgeist study or common typographical errors. This spider allows you to research the searching behaviour of internet users
     * There are countless ways this data can be exploited for your website, service or SEO.
     */


    
error_reporting(E_ALL & ~E_NOTICE);

    require_once 
"functions-sgs.php";

    
// ************************* Configuration variables *************************
    // Your api credentials, you need a plan at us-proxies.com to use this feature
    // You may use another service but this project was built around the us-proxies service, other services will likely require more work
    
$pwd US-PROXIES.COM-API-KEY;
    
$uid API-USER-ID;

    
$working_dir './local_cache_sgs';
    
$test_keywords 'Hairdryer';
    
$test_spider_depth 1;         // Recursion depth when operating in spider mode. Set to 0 to disable spider recursion ! Value 5 already leads to up to 100,000 results. Be cautious.
    
$test_mutate_keyword 1;       // Generates virtual phrases by adding the letters a-z to your primary keyword(s), this leads to ~300 close related phrases in recursion level 0
    
$test_mode 'chrome';          // 'firefox' or 'chrome' , chrome is the newer approach
    //$test_mode = 'firefox';       // 'firefox' or 'chrome' , chrome is the newer approach
    
$test_relevance_filter=300;     // when using test_mode=chrome it is possible to filter for the suggest relevance. Perfect relevance is 1000 but even 550 is usually still a good and relevant keyword
                                    // however, by changing the relevance it is possible to tweak the number of results.
    
$test_maxresults 5000;        // stop working after reaching this count of results (or no results left).

    
$test_country "global";       // Currently not in use
    
$test_language "English";     // Language to use, non English is mainly useful if your keyword is in another language as well but can also make a difference otherwise.
    
$test_force_cache=0;            // forces to load from cache even if cached result is too old


    
$PROXY = array();               // after the rotate api call this variable contains these elements: [address](proxy host),[port](proxy port),[external_ip](the external IP),[ready](0/1)
    
$PLAN = array();                // after the plan api call this variable contains the PLAN details about ip count, processes, protocol, etc
    
$dataset = array();             // this is our main data container it will contain all our results

    
$primary_keywords explode(','$test_keywords);
    if (!
count($primary_keywords)) die ("Error: no keywords defined.\n");
    if (!
rmkdir($working_dir)) die("Failed to create/open $working_dir\n");

    
$ready get_plan();
    if (!
$ready) die("The specified API credentials for user $uid are not active or invalid. \n");
    if (
$PLAN['protocol'] != "http") die("Wrong proxy protocol configured, switch to HTTP and retry. \n");

    
// Query API to get proper codes and domains for country and language selection
    
$api_suggest_data get_api_google_suggest($test_country$test_language); // has to be global reachable
    
if (!$api_suggest_data) die("Invalid country/language specified.\n");


    
$dataset=array();

    
$ch new_curl_session(); // $ch is the cURL handler for our requests
//var_dump($country_data);die();

    
$language=$api_suggest_data['lc'];
    
$empty_counter=0// counts empty responses

    //spidering if configured
    
$start_time=time();
    for (
$recursion_level=0;$recursion_level<=$test_spider_depth;$recursion_level++)
    {
        
$keywords generate_keywords($dataset,$language,$primary_keywords,$recursion_level);
        
$data=get_suggests($dataset,$keywords,$api_suggest_data,$recursion_level,$test_maxresults);
        if (
$data['success'] >= 1)
        {

            
//$dataset[$language][$recursion_level][$keyword]=$suggests[]
        
} else
            if (
$data['success'] == 0)
            {
                
// empty result, count
                
$empty_counter++;
            } else
                if (
$data['success'] < 0)
                {
                    echo 
"hard error requires stop\n";
                    break;
                }
        
$spent time()-$start_time;
        
$time_str="$spent seconds";
        if (
$spent 3600)
            
$time_str=(int)($spent/60)." minutes";
        
$num=count_results($dataset,$language);

        if (
$num >= $test_maxresults)
        {
            break;
        } else
            
verbose("Spider status: Recursion level $recursion_level, Total keywords: $num keywords, Time spent: $time_str\n");
    }
    
$recursion_level--;
    
$num=count_results($dataset,$language);
    
verbose("\n\nFinished\nRecursion level reached: $recursion_level, Total keywords: $num keywords, Time spent: $time_str\n");
    
display_results($dataset,$language);

?>
functions-sgs.php
<?php
    
/* License:
       Open source for private and commercial use.
       This source code is free to use and modify as long as this comment stays untouched on top.
       URL of original source code: http://scrape-google-suggest.compunect.com/
       Author of original source code: http://www.compunect.com
       Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation.
       Exceptions:
       Public redistributing modifications of this source code project is not allowed without written agreement.
       Using this work for private and commercial projects is allowed, redistributing it is not allowed without our written agreement.
       In simple words: You may power your project with this code or a customized version of it, but you may not redistribute the code. Also any legal consequences are your own problem.
     */

    // just comment out the echo or extend the function to your liking
    
function verbose($text)
    {
        echo 
$text;
    }

    
/*
     * Returns up to date data to use for this scraping.
     * includes: user agent (in future, rotating user agents), google language and country codes, domains, etc.
     * This function will only work with a valid plan at us-proxies.com
     *
     * You can remove the API parts and hardcore the values if you do not wish to get a plan there and use a different service for IPs
     */
    
function get_api_google_suggest($country$language)
    {
        global 
$pwd;
        global 
$uid;
        global 
$PROXY;
        global 
$PLAN;
        global 
$portal;
        
$fp fsockopen("us-proxies.com"80);
        if (!
$fp)
        {
            echo 
"Unable to connect to google_cc API \n";

            return 
NULL// connection not possible
        
} else
        {
            
$plan_size=$PLAN['total_ips'];
            
$country=urlencode($country);
            
$language=urlencode($language);
            
fwrite($fp"GET /g_api.php?api=1&uid=$uid&pwd=$pwd&cmd=google_suggest&country=$country&language=$language&plan_size=$plan_size HTTP/1.0\r\nHost: us-proxies.com\r\nAccept: text/html, text/plain, text/*, */*;q=0.01\r\nAccept-Encoding: plain\r\nAccept-Language: en\r\n\r\n");
            
stream_set_timeout($fp8);
            
$res "";
            
$n 0;
            while (!
feof($fp))
            {
                if (
$n++ > 4) break;
                
$res .= fread($fp8192);
            }
            
$info stream_get_meta_data($fp);
            
fclose($fp);

            if (
$info['timed_out'])
            {
                echo 
'API: Connection timed out! \n';

                return 
NULL// api timeout
            
} else
            {
                
$data extractBody($res);
                
$obj unserialize($data);
                if (isset(
$obj['error'])) echo $obj['error'] . "\n";
                if (isset(
$obj['info'])) echo $obj['info'] . "\n";

                return 
$obj['data'];

                if (
strlen($data) < 4) return NULL// invalid api response
            
}
        }
    }

    function 
rmkdir($path$mode 0755)
    {
        if (
file_exists($path)) return 1;

        return @
mkdir($path$mode);
    }

    
/* Delay (sleep) based on the license size to allow optimal scraping
     *
     * Warning!
     * Do NOT change the delay to be shorter than the specified delay.
     * This function will create a delay based on your total IP addresses.
     *
     */
    
function delay_time($reason='ip'$total_threads=1)
    {
        global 
$PLAN;
        global 
$api_suggest_data;


        if (
$reason == 'ip')
        {
            
$d $total_threads*$api_suggest_data['delay_rotate_us'];
            
verbose("wait.. \n");
        }
        if (
$reason == 'request')
        {
            
$d $api_suggest_data['delay_query_us'];
            
verbose("wait.. \n");
        }
        
usleep($d);
    }


    
/*
     * By default (no force) the function will load cached data within 24 hours otherwise reject the cache.
     * The time can be increased to reduce IP usage
     */
    
function load_cache($keyword$api_suggest_data$force_cache,$test_mode)
    {
        global 
$working_dir;

        if (
$force_cache 0) return NULL;
        
$lc $api_suggest_data['lc'];
        
$hash md5($keyword "_" $lc "_" $test_mode );

        
$file "$working_dir/$hash.cache";
        
$now time();
        if (
file_exists($file))
        {
            
$ut filemtime($file);
            
$dif $now $ut;
            
$hour = (int)($dif / (60 60));
            if (
$force_cache || ($dif < (60 60 24)))
            {
                
$serdata file_get_contents($file);
                
$serp_data unserialize($serdata);
                
verbose("Cache: loaded file $file for $keyword . File age: $hour hours\n");

                return 
$serp_data;
            }

            return 
NULL;
        } else
        {
            return 
NULL;
        }

    }
    function 
store_cache($data$keyword$api_suggest_data$test_mode)
    {
        global 
$working_dir;

        
$lc $api_suggest_data['lc'];
        
$hash md5($keyword "_" $lc "_" $test_mode);
        
$file "$working_dir/$hash.cache";
        
$now time();
        if (
file_exists($file))
        {
            
$ut filemtime($file);
            
$dif $now $ut;
            if (
$dif < (60 60 24)) echo "Warning: cache storage initated for $keyword which was already cached within the past 24 hours!\n";
        }
        
$serdata serialize($data);
        
file_put_contents($file$serdataLOCK_EX);
        
verbose("Cache: stored file $file for $keyword.\n");
    }


    
// check_ip_usage() must be called before first use of mark_ip_usage()
    
function check_ip_usage()
    {
        global 
$PROXY;
        global 
$working_dir;
        global 
$ip_usage_data// usage data object as array

        
if (!isset($PROXY['ready'])) return 0// proxy not ready/started
        
if (!$PROXY['ready']) return 0// proxy not ready/started

        
if (!isset($ip_usage_data))
        {
            if (!
file_exists($working_dir "/ipdata.obj")) // usage data object as file
            
{
                echo 
"Warning!\n" "The ipdata.obj file was not found, if this is the first usage of the rank checker everything is alright.\n" "Otherwise removal or failure to access the ip usage data will lead to damage of the IP quality.\n\n";
                
sleep(2);
                
$ip_usage_data = array();
            } else
            {
                
$ser_data file_get_contents($working_dir "/ipdata.obj");
                
$ip_usage_data unserialize($ser_data);
            }
        }

        if (!isset(
$ip_usage_data[$PROXY['external_ip']]))
        {
            
verbose("IP $PROXY[external_ip] is ready for use \n");

            return 
1// the IP was not used yet
        
}
        if (!isset(
$ip_usage_data[$PROXY['external_ip']]['requests'][20]['ut_google']))
        {
            
verbose("IP $PROXY[external_ip] is ready for use \n");

            return 
1// the IP has not been used 20+ times yet, return true
        
}
        
$ut_last = (int)$ip_usage_data[$PROXY['external_ip']]['ut_last-usage']; // last time this IP was used
        
$req_total = (int)$ip_usage_data[$PROXY['external_ip']]['request-total']; // total number of requests made by this IP
        
$req_20 = (int)$ip_usage_data[$PROXY['external_ip']]['requests'][20]['ut_google']; // the 20th request (if IP was used 20+ times) unixtime stamp

        
$now time();
        if ((
$now $req_20) > (60 60))
        {
            
verbose("IP $PROXY[external_ip] is ready for use \n");

            return 
1// more than an hour passed since 20th usage of this IP
        
} else
        {
            
$cd_sec = (60 60) - ($now $req_20);
            
verbose("IP $PROXY[external_ip] needs $cd_sec seconds cooldown, not ready for use yet \n");

            return 
0// the IP is overused, it can not be used for scraping without being detected by the search engine yet
        
}
    }

    
/*
     * Updates and stores the ip usage data object
     * Marks an IP as used and re-sorts the access array
     */
    
function mark_ip_usage()
    {
        global 
$PROXY;
        global 
$working_dir;
        global 
$ip_usage_data// usage data object as array

        
if (!isset($ip_usage_data)) die("ERROR: Incorrect usage. check_ip_usage() needs to be called once before mark_ip_usage()!\n");
        
$now time();

        
$ip_usage_data[$PROXY['external_ip']]['ut_last-usage'] = $now// last time this IP was used
        
if (!isset($ip_usage_data[$PROXY['external_ip']]['request-total'])) $ip_usage_data[$PROXY['external_ip']]['request-total'] = 0;
        
$ip_usage_data[$PROXY['external_ip']]['request-total']++; // total number of requests made by this IP
        // shift fifo queue
        
for ($req 19$req >= 1$req--)
        {
            if (isset(
$ip_usage_data[$PROXY['external_ip']]['requests'][$req]['ut_google']))
            {
                
$ip_usage_data[$PROXY['external_ip']]['requests'][$req 1]['ut_google'] = $ip_usage_data[$PROXY['external_ip']]['requests'][$req]['ut_google'];
            }
        }
        
$ip_usage_data[$PROXY['external_ip']]['requests'][1]['ut_google'] = $now;

        
$serdata serialize($ip_usage_data);
        
file_put_contents($working_dir "/ipdata.obj"$serdataLOCK_EX);

    }

    function 
new_curl_session($ch NULL)
    {
        global 
$PROXY;
        global 
$api_suggest_data;
        global 
$test_mode;
        if (
$test_mode == 'chrome')
            
$default_agent $api_suggest_data['default_agent_chrome'];
        else
            
$default_agent $api_suggest_data['default_agent'];

        if ((!isset(
$PROXY['ready'])) || (!$PROXY['ready'])) return $ch// proxy not ready

        
if (isset($ch) && ($ch != NULL))
        {
            
curl_close($ch);
        }
        
$ch curl_init();
        
curl_setopt($chCURLOPT_HEADER0);
        
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
$curl_proxy "$PROXY[address]:$PROXY[port]";
        
curl_setopt($chCURLOPT_PROXY$curl_proxy);
        
curl_setopt($chCURLOPT_CONNECTTIMEOUT20);
        
curl_setopt($chCURLOPT_TIMEOUT20);
        
curl_setopt($chCURLOPT_USERAGENT$default_agent); // firefox
        
return $ch;
    }
    function 
getip()
    {
        global 
$PROXY;
        if (!
$PROXY['ready']) return -1// proxy not ready

        
$curl_handle curl_init();
        
curl_setopt($curl_handleCURLOPT_URL'http://ipcheck.ipnetic.com/remote_ip.php'); // returns the real IP
        
curl_setopt($curl_handleCURLOPT_CONNECTTIMEOUT10);
        
curl_setopt($curl_handleCURLOPT_TIMEOUT10);
        
curl_setopt($curl_handleCURLOPT_RETURNTRANSFER1);
        
$curl_proxy "$PROXY[address]:$PROXY[port]";
        
curl_setopt($curl_handleCURLOPT_PROXY$curl_proxy);
        
$tested_ip curl_exec($curl_handle);

        if (
preg_match("^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}^"$tested_ip))
        {
            
curl_close($curl_handle);

            return 
$tested_ip;
        } else
        {
            
$info curl_getinfo($curl_handle);
            
curl_close($curl_handle);

            return 
0// possible error would be a wrong authentication IP or a firewall
        
}
    }


    
// return 1 if account is ready, otherwise 0
    
function get_plan()
    {
        global 
$uid;
        global 
$pwd;
        global 
$PLAN;

        
$res ip_service("plan"); // will fill $PLAN
        
$ip "";
        if (
$res <= 0)
        {
            
verbose("API error: Proxy API connection failed (Error $res). trying again later..\n\n");

            return 
0;
        } else
        {
            (
$PLAN['active'] == 1) ? $ready "active" $ready "not active";
            
verbose("API success: License is $ready.\n");
            if (
$PLAN['active'] == 1) return 1;

            return 
0;
        }

        return 
$PLAN;
    }
    
/*
        * This is the API function to retrieve US IP addresses
        * This function handles the API calls "plan" and "rotate"
        *
        * Rotate: On success this function will define the global $PROXY variable, adding the elements ready,address,port,external_ip and return 1
        * On failure the return is 0 or smaller and the PROXY variable ready element is set to "0"
        * It is good practice to use the API response in $PROXY instead of hardcoding connection parameters
        *
        * Plan: On success this function will define the global $PLAN variable, adding the elements active, max_ips, total_ips, protocol, processes and return 1
        * It is good practice to make one call to "plan" upon starting your script to find out about the status and size of the plan
        */
    
function extractBody($response_str)
    {
        
$parts preg_split('|(?:\r?\n){2}|m'$response_str2);
        if (isset(
$parts[1])) return $parts[1]; else  return '';
    }
    function 
ip_service($cmd$x "")
    {
        global 
$pwd;
        global 
$uid;
        global 
$PROXY;
        global 
$PLAN;

        
$fp fsockopen("us-proxies.com"80);
        if (!
$fp)
        {
            echo 
"Unable to connect to API \n";

            return -
1// connection not possible
        
} else
        {
            if (
$cmd == "plan")
            {
                
fwrite($fp"GET /api.php?api=1&uid=$uid&pwd=$pwd&cmd=plan&extended=1 HTTP/1.0\r\nHost: us-proxies.com\r\nAccept: text/html, text/plain, text/*, */*;q=0.01\r\nAccept-Encoding: plain\r\nAccept-Language: en\r\n\r\n");

                
stream_set_timeout($fp8);
                
$res "";
                
$n 0;
                while (!
feof($fp))
                {
                    if (
$n++ > 4) break;
                    
$res .= fread($fp8192);
                }
                
$info stream_get_meta_data($fp);
                
fclose($fp);

                if (
$info['timed_out'])
                {
                    echo 
'API: Connection timed out! \n';
                    
$PLAN['active'] = 0;

                    return -
2// api timeout
                
} else
                {
                    if (
strlen($res) > 1000) return -3// invalid api response (check the API website for possible problems)
                    
$data extractBody($res);
                    
$ar explode(":"$data);
                    if (
count($ar) < 4) return -100// invalid api response
                    
switch ($ar[0])
                    {
                        case 
"ERROR":
                            echo 
"API Error: $res \n";
                            
$PLAN['active'] = 0;

                            return 
0// Error received
                            
break;
                        case 
"PLAN":
                            
$PLAN['max_ips'] = $ar[1]; // number of IPs licensed
                            
$PLAN['total_ips'] = $ar[2]; // number of IPs assigned
                            
$PLAN['protocol'] = $ar[3]; // current proxy protocol (http, socks, ..)
                            
$PLAN['processes'] = $ar[4]; // number of available proxy processes
                            
if ($PLAN['total_ips'] > 0$PLAN['active'] = 1; else $PLAN['active'] = 0;

                            return 
1;
                            break;
                        default:
                            echo 
"API Error: Received answer $ar[0], expected \"PLAN\"";
                            
$PLAN['active'] = 0;

                            return -
101// unknown API response
                    
}
                }

            } 
// cmd==plan


            
if ($cmd == "rotate")
            {
                
$PROXY['ready'] = 0;
                
fwrite($fp"GET /api.php?api=1&uid=$uid&pwd=$pwd&cmd=rotate&randomize=0&offset=0 HTTP/1.0\r\nHost: us-proxies.com\r\nAccept: text/html, text/plain, text/*, */*;q=0.01\r\nAccept-Encoding: plain\r\nAccept-Language: en\r\n\r\n");
                
stream_set_timeout($fp8);
                
$res "";
                
$n 0;
                while (!
feof($fp))
                {
                    if (
$n++ > 4) break;
                    
$res .= fread($fp8192);
                }
                
$info stream_get_meta_data($fp);
                
fclose($fp);

                if (
$info['timed_out'])
                {
                    echo 
'API: Connection timed out! \n';

                    return -
2// api timeout
                
} else
                {
                    if (
strlen($res) > 1000) return -3// invalid api response (check the API website for possible problems)
                    
$data extractBody($res);
                    
$ar explode(":"$data);
                    if (
count($ar) < 4) return -100// invalid api response
                    
switch ($ar[0])
                    {
                        case 
"ERROR":
                            echo 
"API Error: $res \n";

                            return 
0// Error received
                            
break;
                        case 
"ROTATE":
                            
$PROXY['address'] = $ar[1];
                            
$PROXY['port'] = $ar[2];
                            
$PROXY['external_ip'] = $ar[3];
                            
$PROXY['ready'] = 1;
                            
usleep(230000); // additional time to avoid connecting during proxy bootup phase, removing this can cause random connection failures but will increase overall performance for large IP licenses
                            
return 1;
                            break;
                        default:
                            echo 
"API Error: Received answer $ar[0], expected \"ROTATE\"";

                            return -
101// unknown API response
                    
}
                }
            } 
// cmd==rotate
        
}
    }

    
// obtain a fresh IP through us-proxies.com API
    
function rotate_proxy()
    {
        global 
$PROXY;
        global 
$ch;
        
$max_errors 3;
        
$success 0;
        while (
$max_errors--)
        {
            
$res ip_service("rotate"); // will fill $PROXY
            
$ip "";
            if (
$res <= 0)
            {
                
verbose("API error: Proxy API connection failed (Error $res). trying again soon..\n\n");
                
sleep(21); // retry after a while, maybe a routing failure
            
} else
            {
                
verbose("API success: Received proxy IP $PROXY[external_ip] on port $PROXY[port]\n");
                
$success 1;
                break;
            }
        }
        if (
$success)
        {
            
$ch new_curl_session($ch);

            return 
1;
        } else
        {
            return 
"API rotation failed. Check license, firewall and API credentials.\n";
        }
    }

    
// gets one keyword
    
function scrape_suggest($keyword$api_suggest_data)
    {
        global 
$ch;
        global 
$test_mode;
        global 
$test_relevance_filter;

        
$data=array('success'=>0'data'=>array());
        
$google_ip $api_suggest_data['domain']; // currently ignored, needs to be analyzed
        
$hl $api_suggest_data['lc'];
        if (
$test_mode=='firefox')
        {
            
// firefox mode allows only language specific lookups and is more outdated
            
$domain$api_suggest_data['domain'];
            
$client$api_suggest_data['client'];
            
$keyword_enc=urlencode($keyword);
            
$url "http://$domain/complete/search?q=$keyword_enc&client=$client&hl=$hl";
        } else
        {
            
// chrome mode allows country and language specific lookups, it returns additional meta data
            
$domain $api_suggest_data['domain_chrome'];
            
$client $api_suggest_data['client_chrome'];
            
$keyword_enc=urlencode($keyword);
            
$url "http://$domain/complete/search?q=$keyword_enc&client=$client&hl=$hl";
        }

        
curl_setopt($chCURLOPT_URL$url);
        
$htmdata curl_exec($ch);
        if (!
$htmdata)
        {
            
$error curl_error($ch);
            
$info curl_getinfo($ch);
            echo 
"\tError scraping: $error [ $error ]\n";
            
sleep(3);
            return 
$data;
        } else
        {
            if (
strlen($htmdata) < 2)
            {
                
sleep(3);
                echo 
"\tError scraping: empty result\n";
                return 
$data;
            }
        }
        if ((
$data_ar json_decode($htmdatatrue)) !== null)
        {
            if (
$test_mode=='firefox')
            {
                
$keywords $data_ar[1];
                
$data['success']=1;
                
$data['data'] = $keywords;
            } else
            {
                
// in chrome mode we have a lot more data
                
$keywords $data_ar[1];
                
$titles $data_ar[2];
                
$meta $data_ar[4];
                if (isset(
$meta) && isset($meta['google:suggesttype']))
                {
                    foreach (
$meta['google:suggesttype'] as $idx => $meta_type)
                    {
                        if (
strtolower($meta_type) != 'query')
                        {
                            echo 
"removed non query index $idx$keywords[$idx]\n";
                            unset(
$keywords[$idx]);
                        }
                    }
                }
                if (isset(
$meta) && isset($meta['google:suggestrelevance']))
                {
                    foreach (
$meta['google:suggestrelevance'] as $idx => $meta_relevance)
                    {
                        if ((int)
$meta_relevance $test_relevance_filter )
                        {
                            echo 
"filtered out unrelevant index $idx$keywords[$idx]\n";
                            unset(
$keywords[$idx]);
                        }
                    }
                }


                
$data['success']=1;
                
$data['data'] = $keywords;
            }

        }

        return 
$data;
    }

    
// wrapper to get a full set of keywords
    
function get_suggests(&$dataset,$keywords,$api_suggest_data,$recursion_level,$max_results=0xffffff)
    {
        global 
$test_force_cache;
        global 
$test_mode;
        
$rotate_now=0// set to 1 to force a rotation after launch, even if IP is not marked as overused
        
$empty_counter=0// count empty replies
        
$language=$api_suggest_data['lc'];
        
$result=array('success'=>0);

        
$rcounter=1;
        foreach (
$keywords as $keyword)
        {
            
verbose("Scraping keyword '$keyword' at recursion level $recursion_level\n");
            
$cdata load_cache($keyword$api_suggest_data$test_force_cache,$test_mode); // load results from local cache if available for today
            // check IP usage
            
$ip_ready check_ip_usage(); // test if ip has not been used within the critical time
            // obtain new IP if necessary
            
if (!$cdata// omit all of this if we have a cache
                
if ((!$ip_ready || $rotate_now))
                    while (!
$ip_ready || $rotate_now// test if the IP is ready or overused
                    
{
                        
$ok rotate_proxy(); // start/rotate to the IP that has not been started for the longest time, also tests if proxy connection is working
                        
if ($ok != 1)
                        {
                            echo(
"Fatal error: proxy rotation failed:\n $ok\n");
                            
$result['success']=-1;
                            return 
$result;
                        }
                        
$ip_ready check_ip_usage(); // test if ip has not been used within the critical time
                        
if (!$ip_ready)
                        {
                            echo(
"Fatal error: No fresh IPs left, wait a while and retry or obtain a larger plan. \n"); // proper error handling relies on exclusive use of the plan and rotation randomization == 0
                            
$result['success']=-2;
                            return 
$result;
                        }
                        else
                        {
                            
$rotate_now 0;
                            
delay_time('ip'); // proper delay
                            
break; // ip rotated successfully
                        
}
                    }
                else
                    
delay_time('request');


            if (
$cdata)
            {
                
// we have the data already in cache
                
$result['success']++;
                
$dataset[$language][$recursion_level][$keyword]=$cdata['data'];
            } else
            {
                
// we have to make a live request
                
$scrape_result scrape_suggest($keyword$api_suggest_data);
                if (
$scrape_result['success'] == 1)
                {
                    if (!(
$rcounter++%5)) $rotate_now=1;
                    
$result['success']++;
                    
$result['errors']=0;
                    
$dataset[$language][$recursion_level][$keyword]=$scrape_result['data'];
                    
mark_ip_usage(); // store IP usage, this is very important to avoid detection and gray/blacklistings
                    
$cdata['keyword'] = $keyword;
                    
$cdata['cc'] = $api_suggest_data['cc'];
                    
$cdata['lc'] = $api_suggest_data['lc'];
                    
$cdata['result_count'] = count($scrape_result['data']);
                    
$cdata['data']=$scrape_result['data'];
                    
store_cache($cdata$keyword$api_suggest_data$test_mode); // store results into local cache
                
}  else
                {
                    if (!(
$empty_counter++%5)) $rotate_now=1;
                    
$dataset[$language][$recursion_level][$keyword]=array();
                    if (
$result['errors']++ > 10)
                    {
                        echo 
"More than 10 errors without results in between, hard abort\n";
                        
$result['success']=-3;
                        return 
$result;
                    }

                }
            }

            
$num_results=count_results($dataset,$language);
            if (
$num_results >= $max_results)
            {
                echo 
"reached configured max results, ending..\n";
                break;
            }

        }
        return 
$result;
    }


    
// generates a set of keywords for a specific recursion level
    
function generate_keywords(&$dataset,$language,$primary_keywords,$recursion_level)
    {
        if (
$recursion_level == 0) return $primary_keywords;
        
$keywords = array();
        
$level=$recursion_level-1;

        foreach (
$dataset[$language][$level] as $kw => $results)
        {
            
$keywords array_unique(array_merge($keywords$results));
        }
        return 
$keywords;
    }

    
// counts all results
    
function count_results(&$dataset,$language,$level=-1)
    {
        
$num=0;
        if (
$level == -1)
            for (
$level=0;$level<10;$level++)
            {
                if (!isset(
$dataset[$language][$level])) break;
                foreach (
$dataset[$language][$level] as $kw => $results$num+=count($results);
            }
        else
            foreach (
$dataset[$language][$level] as $kw => $results$num+=count($results);
        return 
$num;
    }

    function 
display_results(&$dataset,$language)
    {
        
$mask "| %-50.50s | %-50.50s |\n";
        
$separator=str_repeat("-"50);

        echo 
"\nGoogle Suggest Spider results\n";
        for (
$level=0;$level<10;$level++)
        {
            if (!isset(
$dataset[$language][$level])) break;
            
$num count_results($dataset,$language,$level);
            echo 
"Recursion level $level contains $num keywords:\n";
            
printf($mask'Keyword''Suggests');
            
printf($mask$separator$separator);

            foreach (
$dataset[$language][$level] as $kw => $results)
            {
                
$line=1;
                
// $mask = "|%30s |%-30s | x |\n"; // allow table corruption
                
foreach ($results as $suggest)
                {
                    if (
$line++ == 1)
                        
printf($mask$kw$suggest);
                    else
                        
printf($mask''$suggest);
                }

                echo 
"\n";
            }
        }

    }

    function  
mutate_keywords(&$primary_keywords)
    {
        
$mutation=range('a','z'); // you can change this to add more or less mutation
        
$new_keywords=$primary_keywords;
        foreach (
$primary_keywords as &$kw)
        {
            foreach (
$mutation as $mut)
                
$new_keywords[]="$kw $mut";
        }
        
$primary_keywords=$new_keywords;
    }

?>