インスタグラム自動いいねツールを自分で作ってみた【Ruby】

##はじめに

インスタグラムのフォロワーを増やしたい。けどそんなに時間を掛けたくない。有料インスタグラムツールは料金が高そうだし、、


という訳で自動的にいいねをつけることができるプログラミングを組んでみました！


##対象者
* 手軽にインスタグラムのフォロワー数を増やしたい人
* プログラミング学習初心者


##僕が開発した時の環境
```
version 
Ruby 2.6.3
gem 3.0.3
Homebrew 2.5.2 
```

##開発手順

まずはselenium-driverをインストールします。

>seleniumとはブラウザのオートメーションツールです。自動でブラウザを操作することができます。Ruby、Pyhonなどで書かれたスクリプトを元に、ブラウザを操作するためのJavaScriptを生成し、対象のページにそのJavaScriptを埋め込んでブラウザを操作するという仕組みです。

参照記事
https://app.codegrid.net/entry/selenium-1
###selenium-driverのインストール

```
gem install selenium-webdriver 
```
次にchrome-driverをインストールします。
chrome-driverとは、Google Chromeを操作するために必要なドライバ（ソフト）です。ブラウザごとに専用のドライバが用意されています。

###chrome-driverのインストール

```
brew install chrome-driver
```

次にchrome-driverのパスを通します。


```
$ echo export PATH=' ●●（:$PATH'  >> ~/ .bash_profile
```


次に実装します。


###全体のソース

```ruby:insta_auto.rb
require 'selenium-webdriver'
require 'uri'

class InstagramBot
  attr_accessor :driver
  def initialize(username,password)
    
  end

  def good_hashtag(key_word,number)
   
  end

  def good_user_post(username,number)
   
  end

end
username = ""
password = ""
bot = InstagramBot.new(username,password)
key_word = ""
bot.good_hashtag(key_word,15)
# username = ""
# bot.good_user_post(username,15)

```

###ログイン機能

```ruby:insta_auto.rb
 def initialize(username,password)
    # 略
    ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
    puts "aaaaaaaaaaa"
    caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => { args: ["--user-agent=#{ua}", 'window-size=1280x800', '--incognito'] }) # シークレットモード
    puts "vbbbbbbb"
    client = Selenium::WebDriver::Remote::Http::Default.new
    client.read_timeout = 300
    @driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps, http_client: client
    @driver.manage.timeouts.implicit_wait = 30
    @driver.navigate.to'https://www.instagram.com/accounts/login/?source=auth_switcher'
    puts "ddddd"
    @driver.find_element(:name, 'username').send_keys(username)
    @driver.find_element(:name, 'password').send_keys(password)
    sleep 1
    @driver.find_element(:name, 'password').send_keys(:return)
  end

```

###指定のハッシュタグにいいねをつける

 ```ruby:insta_auto.rb
def good_hashtag(key_word,number)
    encode_word = URI.encode(key_word)
    sleep 3
    @driver.navigate.to"https://www.instagram.com/explore/tags/#{encode_word}/"
    sleep 2
    @driver.execute_script("document.querySelectorAll('article img')[9].click()")
    sleep 2
    number.times{
      begin
        @driver.execute_script("console.log(document.querySelectorAll('button.wpO6b')[1].click())")
        sleep 2
      rescue
        puts "already good this post"
      end
      sleep 2
      @driver.execute_script("document.querySelector('a.coreSpriteRightPaginationArrow').click()")
      sleep 2
    }
  end

```


###指定のユーザーにハッシュタグをつける

```ruby:insta_auto.rb
def good_user_post(username,number)
    sleep 3
    @driver.navigate.to"https://www.instagram.com/#{username}/"
    sleep 2
    @driver.execute_script("document.querySelectorAll('article img')[0].click()")
    sleep 2
    number.times{
      begin
        @driver.execute_script("document.querySelectorAll('span.glyphsSpriteHeart__outline__24__grey_9')[1].click()")
      rescue
        puts "already good this post"
      end
      sleep 2
      @driver.execute_script("document.querySelector('a.coreSpriteRightPaginationArrow').click()")
      sleep 2
    }
  end
```

##まとめ
開発環境の構築にかなり時間がかかってしまいました。一方でソースコードの記述に関しては参考になる記事がたくさん出てきたのであまり苦労せず助かりました。
僕の肌感覚ですが、プログラミング初心者は「言語はある程度勉強しているけど環境構築に関しては現場に入って徐々に」という方が多いのではないかと思います。プログラミングスクールを卒業したばかりの僕には環境構築を一からというのはかなり骨が折れました笑
かなり色んな記事を飛び回って試行錯誤しなければいけないので。
なので今回は僕のような方を対象にした「一連の流れを体系化した記事」を作りました！参考になれば幸いです。

また、噂ですがあまりこのインスタ自動いいね機能を使いすぎるとInstagramからアカウントが削除される可能性もあるとのこと。
使う際は自己責任でお願いします！


###参照記事：
https://qiita.com/nirs_kd56/items/6979a026497f2f4a59bf
https://qiita.com/FJHoshi/items/c847ad51af388d2dbb4a 
https://qiita.com/y-agatsuma/items/ea2c9845ee0a931d5c9c