<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Hasan Aboul Hasan</title>
    <description>The latest articles on Forem by Hasan Aboul Hasan (@hassancs91).</description>
    <link>https://forem.com/hassancs91</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F876646%2F939683b0-941c-4333-a295-3ef84288ad5f.jpg</url>
      <title>Forem: Hasan Aboul Hasan</title>
      <link>https://forem.com/hassancs91</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hassancs91"/>
    <language>en</language>
    <item>
      <title>How To Install SQL Server on Ubuntu</title>
      <dc:creator>Hasan Aboul Hasan</dc:creator>
      <pubDate>Fri, 01 Jul 2022 17:10:51 +0000</pubDate>
      <link>https://forem.com/hassancs91/how-to-install-sql-server-on-ubuntu-1fn8</link>
      <guid>https://forem.com/hassancs91/how-to-install-sql-server-on-ubuntu-1fn8</guid>
      <description>&lt;p&gt;In this post, we'll learn How to Install Microsoft SQL Server on Ubuntu VPS Server. and we will see how to connect and manage it remotely using SQL Server Management Studio on windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Get a VPS Server
&lt;/h2&gt;

&lt;p&gt;In this tutorial, I will use VULTR, and if you wanna follow with me a test, you can use &lt;a href="https://learnwithhasan.com/refer/vultr"&gt;this link&lt;/a&gt; to get 100$ free credits for two weeks!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a new VPS&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ehNXPdHS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v7fvkx96x2fa49rhu48l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ehNXPdHS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v7fvkx96x2fa49rhu48l.png" alt="vultr create server" width="769" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select Cloud compute.&lt;/li&gt;
&lt;li&gt;Select any region you want.&lt;/li&gt;
&lt;li&gt;Select Ubuntu as the OS.&lt;/li&gt;
&lt;li&gt;Enter server name (anything you want)&lt;/li&gt;
&lt;li&gt;Click deploy&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;VULTR will install, deploy, and prepare this Ubuntu Linux server in your account. And when it's finished, you will see the IP address, the username, and the password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KUAUNOF---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbhcuz7uc0bzv83f231a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KUAUNOF---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbhcuz7uc0bzv83f231a.png" alt="vultr vps" width="854" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Great! we have an Ubuntu Server ✅&lt;/strong&gt; Let's Start the installation.&lt;/p&gt;

&lt;p&gt;we will be using &lt;a href="https://www.putty.org/"&gt;putty SSH client&lt;/a&gt; to connect and manage our server.&lt;/p&gt;

&lt;p&gt;Open putty, enter the server IP, and connect:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nmEP9vEG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gdho4nlqs95y3lss5d6t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nmEP9vEG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gdho4nlqs95y3lss5d6t.png" alt="putty connection" width="471" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter "root" as the user name, and get the password from Vultr Dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install SQL Server
&lt;/h2&gt;

&lt;p&gt;The first command is wget command:&lt;br&gt;
&lt;code&gt;wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding SQL server package&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2019.list)"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;NOTE: This may change depending on the Ubuntu version you are working with.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update SQL Server&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get install -y mssql-server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Configuration command *&lt;/em&gt;&lt;br&gt;
&lt;code&gt;sudo /opt/mssql/bin/mssqql-conf setup&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now Continue the wizard:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your edition, I will go with express.&lt;/li&gt;
&lt;li&gt;Accept Terms (Y)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Set The SQL Server Password&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And Congratulations! SQL Server is now starting 🎉 &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Server Run Check Command:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;systemctl status mssql-server --no-pager&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wloo10-2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lpmsb7c2es1ed3wb3bgw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wloo10-2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lpmsb7c2es1ed3wb3bgw.png" alt="Sql server on ubuntu" width="827" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And it's running perfectly.🚀🚀🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing With SQL Server Management Studio
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Setting up SQL Server Remote Port&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;in putty, run this command:&lt;br&gt;
&lt;code&gt;Sudo iptables -A INPUT -p tcp –dport 1433 -j ACCEPT&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Now we can connect to SQL server from our local PC.&lt;/p&gt;

&lt;p&gt;Open SQL Management Studio, Enter your server IP.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4aYzOVKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ncviysrjti2a4ykyfqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4aYzOVKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ncviysrjti2a4ykyfqy.png" alt="sql server management studio" width="606" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter "sa" for the user name, and enter your sql server password that you chose in the setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect!&lt;/strong&gt;&lt;br&gt;
Yay, it did work!!!👌&lt;/p&gt;

&lt;p&gt;I'll be answering questions in the comments below if you have any.&lt;/p&gt;




</description>
      <category>sql</category>
      <category>ubuntu</category>
      <category>dotnet</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How To Build Your Own Keyword Tool With Google Ads API &amp; C#</title>
      <dc:creator>Hasan Aboul Hasan</dc:creator>
      <pubDate>Wed, 22 Jun 2022 19:06:52 +0000</pubDate>
      <link>https://forem.com/hassancs91/how-to-build-your-own-keyword-tool-with-google-ads-api-c-1dec</link>
      <guid>https://forem.com/hassancs91/how-to-build-your-own-keyword-tool-with-google-ads-api-c-1dec</guid>
      <description>&lt;h2&gt;
  
  
  What we will build?
&lt;/h2&gt;

&lt;p&gt;We'll use Google Ads API to build a keyword Research tool that allows you to get keyword suggestions and metrics like &lt;strong&gt;Search volume data&lt;/strong&gt; , &lt;strong&gt;CPC&lt;/strong&gt; and &lt;strong&gt;Competition&lt;/strong&gt; based on user input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples of keyword tools:
&lt;/h2&gt;

&lt;p&gt;If you go to &lt;strong&gt;keywordtool.io&lt;/strong&gt;, you can search for a keyword, it will give you hundreds of keyword suggestions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mrhxmkex5qmneqx0puz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mrhxmkex5qmneqx0puz.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;It is considered one of the best free keyword tools. (But it’s not totally Free)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Another example is &lt;strong&gt;H-supertools&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0wta8v9eln4phfybggu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0wta8v9eln4phfybggu.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I developed H-supertools from scratch, and today this website is one of my main income streams. &lt;/p&gt;

&lt;p&gt;Today, In this post, I will reveal how you can build similar tools, so maybe you can turn it also into an income source too! &lt;/p&gt;

&lt;h2&gt;
  
  
  How does our Keyword Tool works?
&lt;/h2&gt;

&lt;p&gt;It's a simple C# console application. When you run it, you'll have two options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Authenticate with Google Ads API&lt;/li&gt;
&lt;li&gt;Perform keyword research&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq4nxco1qhbtjrk4d4u64.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq4nxco1qhbtjrk4d4u64.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's perform Keyword Research and search for "C#"&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0ryb96h8ektksir1tww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0ryb96h8ektksir1tww.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the search, our tool gets back ~500 keyword ideas with search volume data, competition, and CPC values. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Of course, In my case, it's a simple console application (just for simplicity reasons) But we can use and implement the same code in any type of applications like mobile, web, or even a desktop application.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Let's Start Coding!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Setup Your Google Console Account&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, our first step is to go to &lt;a href="https://console.cloud.google.com/" rel="noopener noreferrer"&gt;Google cloud console&lt;/a&gt; and login with your Gmail account.&lt;/p&gt;

&lt;p&gt;After you login, &lt;strong&gt;create a project&lt;/strong&gt;, and then &lt;strong&gt;click on Enable APIs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsp8sghd9q8jlc7es76ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsp8sghd9q8jlc7es76ul.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now search for “Google ad API” and &lt;strong&gt;Enable The API&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbf4kulpgj9xvy67ska1j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbf4kulpgj9xvy67ska1j.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create OAuth Credentials to access Google Ads API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxz8tr82xkmc4jphpm5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxz8tr82xkmc4jphpm5b.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finish the wizard, then you will be able to get the client and secret IDs as shown in the images below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrwxcq9h0a6te5nbsaeh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrwxcq9h0a6te5nbsaeh.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0lag90opczu7oswb5u5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0lag90opczu7oswb5u5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We will use these Keys to authenticate our application.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before we continue, if you are that person who loves to watch videos instead of reading long posts, you can check the full tutorial here:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/UCnpa2-s9h4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Ads API Authentication Code
&lt;/h2&gt;

&lt;p&gt;Open &lt;em&gt;&lt;strong&gt;KeywordIdeasGoogleAPI.cs&lt;/strong&gt;&lt;/em&gt; Class in our Project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fght9te5lkxm2t39ritfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fght9te5lkxm2t39ritfr.png" alt="google ads api with c#"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will see we have two methods.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authenticate()&lt;/li&gt;
&lt;li&gt;Search()&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I found the Google ads API authentication code on &lt;a href="https://developers.google.com/google-ads/api/docs/samples/" rel="noopener noreferrer"&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I tweaked it a little bit and Made it simpler for you to understand and use 😃&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's Authenticate!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I will run the application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmb64x0a3giayr9hpyu5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmb64x0a3giayr9hpyu5w.png" alt="google ads api authentication c#"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hit 1 to authenticate.&lt;/p&gt;

&lt;p&gt;It will ask you for the client ID and secret&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn14cf1j8dror9ma0ushf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn14cf1j8dror9ma0ushf.png" alt="google ads api authentication example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy From Google Console, Paste, hit enter, and authenticate your Gmail account.&lt;/p&gt;

&lt;p&gt;Now it will prompt you to copy authentication keys:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdd789gi247aakkmyjl9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdd789gi247aakkmyjl9.png" alt="google ads api c# authentication keys"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy and paste these keys in the app.config file in your project files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftff1664nrvedidwjbnxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftff1664nrvedidwjbnxo.png" alt="google ads api app.config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Get The Google Ads Developer Token
&lt;/h2&gt;

&lt;p&gt;Now the next step is to get the developer token. As You can see, we need to set the developer token in the app.config file.&lt;/p&gt;

&lt;p&gt;For this, you will need to create a &lt;em&gt;Google ads Manager Account&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffagkjs8znn7781b85eb6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffagkjs8znn7781b85eb6.png" alt="Google ads Manager Account"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.google.com/google-ads/api/docs/first-call/dev-token" rel="noopener noreferrer"&gt;Click Here To Create a Google ads Manager Account.&lt;br&gt;
&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Create one, Sign In, and click on &lt;strong&gt;tools&lt;/strong&gt;, then click on &lt;strong&gt;API center&lt;/strong&gt; and you'll see the developer token there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnn1zqity6u0sctpmafye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnn1zqity6u0sctpmafye.png" alt="google ads developer token"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We got the Token, Paste in the app.config file, and we are ready!&lt;/p&gt;

&lt;h2&gt;
  
  
  Perform a Keyword Research Test
&lt;/h2&gt;

&lt;p&gt;In the Google Ads API, we have the &lt;a href="https://developers.google.com/google-ads/api/docs/keyword-planning/generate-keyword-ideas" rel="noopener noreferrer"&gt;keyword ideas service&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is the service I used to perform keyword research.&lt;/p&gt;

&lt;p&gt;The Sample Code mentioned on the page will not work directly, this is why again, I tweaked and simplified it so you can run easily and smoothly. &lt;strong&gt;(I think I deserve a Heart and maybe a Unicorn 😅)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Search Method&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzgkkvrbzkuvrm0ndav1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzgkkvrbzkuvrm0ndav1.png" alt="Keyword tool with google ads api"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the main application, create an instance of our class &lt;strong&gt;&lt;em&gt;KeywordIdeasGoogleAPI&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Create a new object of Google client, and pass it to the search method with other parms: &lt;em&gt;locationId&lt;/em&gt;, &lt;em&gt;customerId&lt;/em&gt;, &lt;em&gt;languageId&lt;/em&gt;, and the &lt;em&gt;searchTerm&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit0sdsu6y0m2n445sanl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit0sdsu6y0m2n445sanl.png" alt="keyword tool with google ads api"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get the customer id?&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://developers.google.com/google-ads/api/docs/first-call/test-accounts" rel="noopener noreferrer"&gt;Create a Google Ads Test Account&lt;br&gt;
&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Login, and you will see a red message showing that this is a test account, just click and copy the customer ID as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz6ttbtkfpi3yra0gojm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz6ttbtkfpi3yra0gojm.png" alt="google ads test account"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure to remove the dashes and keep only the numbers when you paste in your code.&lt;/p&gt;

&lt;p&gt;we still have locationId and languageId.&lt;/p&gt;

&lt;p&gt;Find a list of Location IDs by &lt;a href="https://developers.google.com/google-ads/api/reference/data/geotargets" rel="noopener noreferrer"&gt;clicking here&lt;/a&gt;. And Find a list of Language Ids &lt;a href="https://developers.google.com/google-ads/api/reference/data/codes-formats#languages" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For Example, "&lt;em&gt;English&lt;/em&gt;" Id is &lt;strong&gt;1000&lt;/strong&gt;, and "&lt;em&gt;New York&lt;/em&gt;" Id is &lt;strong&gt;21167&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now we are ready to perform a keyword research!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run the application again&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fugk7iyvp672dewtgi0jq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fugk7iyvp672dewtgi0jq.png" alt="keyword tool with c#"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's say, we wanna search for this keyword: “&lt;a href="https://www.youtube.com/channel/UCiLmLn593TxhOLpvbOfJFRg" rel="noopener noreferrer"&gt;subscribe to my channel.&lt;/a&gt;” 😅&lt;/p&gt;

&lt;p&gt;Hit Enter, and you will see the Magic🎩&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F274yr7lg6d1fqewyajb5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F274yr7lg6d1fqewyajb5.png" alt="get search volume with c#"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note: CPC Bids means that advertisers are paying these numbers to advertise on Google.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hassancs91/Keyword-Research-Tool-Google-Ads-API-Csharp" rel="noopener noreferrer"&gt;Check The Full Project Here on Github.&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you did it. Congratulations 🥳&lt;/p&gt;

&lt;p&gt;The Google Ads API is free but has some limitations.Did you know you can use the &lt;a href="https://dev.to/hassancs91/develop-a-keyword-research-tool-in-minutes-python-and-c-4g32"&gt;Free Google Suggestions API&lt;/a&gt; To Develop a Keyword Research Tool with no limits! Yes! If you wanna learn how. Check this &lt;a href="https://dev.to/hassancs91/develop-a-keyword-research-tool-in-minutes-python-and-c-4g32"&gt;post&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>opensource</category>
      <category>dotnet</category>
      <category>googleapi</category>
    </item>
    <item>
      <title>Develop a Keyword Research Tool in Minutes (Python and C#)</title>
      <dc:creator>Hasan Aboul Hasan</dc:creator>
      <pubDate>Tue, 21 Jun 2022 16:04:47 +0000</pubDate>
      <link>https://forem.com/hassancs91/develop-a-keyword-research-tool-in-minutes-python-and-c-4g32</link>
      <guid>https://forem.com/hassancs91/develop-a-keyword-research-tool-in-minutes-python-and-c-4g32</guid>
      <description>&lt;p&gt;&lt;strong&gt;I reverse engineered 2 Big Keyword Research Tools, and I found out how they work and how you can build the same on your own.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Sites Are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://answerthepublic.com/" rel="noopener noreferrer"&gt;Answerthepublic&lt;/a&gt;: a website that allows users to type in a keyword or phrase and receive a list of related questions that people have searched for on the internet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://keywordtool.io/google" rel="noopener noreferrer"&gt;Keywordtool.io&lt;/a&gt;: a keyword research and analysis tool that helps users find and analyze the best keywords for their website or online business.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even if you are not so experienced in programming, you can still easily follow up with this tutorial and Develop a Keyword Research Tool with Python or C#.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do Keyword Research Tools Work?
&lt;/h2&gt;

&lt;p&gt;Well, it depends on the scope and functionality of the Tools you’re making, and the SEO metrics you want your Tool to Provide.&lt;/p&gt;

&lt;p&gt;In our case, we will focus on “google search suggestions” and “Question Suggestions.” &lt;em&gt;I will also tell you later how you can get more metrics.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let’s see how these tools are getting results, Open Google Search, and Type “Python Tutorial” press space and type the letter “f”, you will see Google suggesting keyword ideas and search queries!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspnxswslvi1pu251b3fq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspnxswslvi1pu251b3fq.png" alt="Develop a Keyword Research Tool dev.to"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you Add “how” before the “python tutorial” keyword in Google Search. you will get question suggestions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs28367tgbg4f3c2k9adh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs28367tgbg4f3c2k9adh.png" alt="Develop a Keyword Research Tool dev.to"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it!&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Read Google autosuggestions programmatically?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;We have two approaches:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Using Web Automation and Scraping&lt;/li&gt;
&lt;li&gt;Using Google Search Free API Call&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I chose the second approach simply because with web automation, the operation will be slower, and you may get Re-captcha to solve, and things will be complicated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Call for Google Keyword Suggestions:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;open your browser, and paste this url:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://google.com/complete/search?output=toolbar&amp;amp;gl=COUNTRY&amp;amp;q=Your_QUERY&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can change the &lt;em&gt;&lt;strong&gt;country&lt;/strong&gt;&lt;/em&gt; and the &lt;em&gt;&lt;strong&gt;query&lt;/strong&gt;&lt;/em&gt; to get google autosuggestions in XML format using this call as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc100jf5vjer3v8cuty9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc100jf5vjer3v8cuty9z.png" alt="Google Suggestions API Results&amp;lt;br&amp;gt;
"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I think you got the point, we will call the Google Suggestions API, then fetch the results from our code.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python code:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;


&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;xml.etree.ElementTree&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;ET&lt;/span&gt;

&lt;span class="c1"&gt;# Define Class
&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;QuestionsExplorer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;GetQuestions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;questionType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;countryCode&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;questionResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="c1"&gt;# Build Google Search Query
&lt;/span&gt;        &lt;span class="n"&gt;searchQuery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;questionType&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="c1"&gt;# API Call
&lt;/span&gt;        &lt;span class="n"&gt;googleSearchUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://google.com/complete/search?output=toolbar&amp;amp;gl=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; \
            &lt;span class="n"&gt;countryCode&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;q=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;searchQuery&lt;/span&gt;

        &lt;span class="c1"&gt;# Call The URL and Read Data
&lt;/span&gt;        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;googleSearchUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;tree&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ElementTree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ET&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromstring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getroot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;suggestion&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CompleteSuggestion&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;suggestion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;suggestion&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;attrib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;questionResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;questionResults&lt;/span&gt;


&lt;span class="c1"&gt;# Get a Keyword From The User
&lt;/span&gt;&lt;span class="n"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Enter a Keyword: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Create Object of the QuestionsExplorer Class
&lt;/span&gt;&lt;span class="n"&gt;qObj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QuestionsExplorer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Call The Method and pass the parameters
&lt;/span&gt;&lt;span class="n"&gt;questions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qObj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GetQuestions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Loop over the list and pring the questions
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;C# code:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="c1"&gt;//start&lt;/span&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Net.Http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Xml.Linq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;GoogleSuggestion&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//Define Class&lt;/span&gt;
    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;QuestionsExplorer&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetQuestions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;questionType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;countryCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;questionResults&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt; &lt;span class="c1"&gt;//List To Return&lt;/span&gt;

            &lt;span class="c1"&gt;//Build Google Search Query&lt;/span&gt;
            &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;searchQuery&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;questionType&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;googleSearchUrl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
            &lt;span class="s"&gt;"http://google.com/complete/search?output=toolbar&amp;amp;gl="&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;countryCode&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"&amp;amp;q="&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;searchQuery&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


            &lt;span class="c1"&gt;//Call The URL and Read Data&lt;/span&gt;
            &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpClient&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HttpClient&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetStringAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;googleSearchUrl&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

                &lt;span class="c1"&gt;//Parse The XML Documents&lt;/span&gt;
                &lt;span class="n"&gt;XDocument&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;XDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

                &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;XElement&lt;/span&gt; &lt;span class="n"&gt;element&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Descendants&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CompleteSuggestion"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Element&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"suggestion"&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="nf"&gt;Attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="n"&gt;questionResults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;questionResults&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="p"&gt;}&lt;/span&gt;



    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Program&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;//Get a Keyword From The User&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter a Keyword:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

            &lt;span class="c1"&gt;//Create Object of the QuestionsExplorer Class&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;qObj&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;QuestionsExplorer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

            &lt;span class="c1"&gt;//Call The Method and pass the parameters&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;questions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;qObj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetQuestions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"what"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"us"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="c1"&gt;//Loop over the list and pring the questions&lt;/span&gt;
            &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="c1"&gt;//Finish&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"---Done---"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;



&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//end&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Get Source Codes on Github:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/hassancs91/Keyword-Research-tool-python" rel="noopener noreferrer"&gt;Python Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hassancs91/Keyword-Research-Tool" rel="noopener noreferrer"&gt;C# Code&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this post, I showed you how you can build a keyword research tool based on Google's Suggestion API with the power of two popular programming languages, C# and Python.&lt;/p&gt;

&lt;p&gt;Maybe you are wondering how to get search metrics, like CPC, Monthly Search Volume, and Competition. The answer is in this &lt;a href="https://dev.to/hassancs91/how-to-build-your-own-keyword-tool-with-google-ads-api-c-1dec"&gt;post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take care, and Happy Coding!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>python</category>
      <category>csharp</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
