Engineerの研鑽

メインはプログラミング系ブログ(本の要約とかもします)

質問はCONTACTやコメントでお願い致します。

【コピペでできるpython】seleniumを使ったインスタいいねの自動化

seleniumを使ったインスタいいねの自動化

こんにちわ!ゆきとです。

今日は先日の記事の続きです。

前回の記事のsqliteによるテーブルを作成した後に、pythonでインスタのいいねの自動化をしていきます。 

www.yukiyukiponsu.work

初心者の方でも理解できるようになるべく噛み砕いて説明するのでぜひご一読ください!

インスタ自動化後のイメージ 

*人間がいいねしているとインスタグラムに思わせるために、いいねを押すタイミングを遅くしたり速くしたりしています

youtu.be

プログラムの作成

フォルダとファイルの作成

ソースコードを作成していく前に完成後のファイル構造のイメージをつかんでください!

そしてこの構造どおりにフォルダ・ファイルを作ってください。

ファイル構造

likebot      (フォルダ)
├  .env      (ファイル)
├  like_hashtag.py   (ファイル)
├  db_init.py     (ファイル)

└ google_drive        (フォルダ)

       └  chromedriver(これは外部からインストールしたものをいれる)

chromedriverというのはseleniumでブラウザを操作するために必要なものです。各々の環境(windows, mac, linux)にあったものを公式サイトからダウンロードして、google_driveフォルダの下に配置しましょう!

詳しいダウンロード方法はおまけにて記載しているので、やり方がよくわからない人はそちらをみてくださいね。

必要なライブラリのインストール

seleniumのインストールpip install selenium
python-dotenvのインストールpip install python-dotenv

ソースコードの記述

それでは各々のソースコードを書いていきましょう!(コピペでOKです)

.env

USERNAME=インスタにログインするためのユーザの名前
PASSWORD=インスタにログインするためのパスワード

DBNAME=insta_post_contents.db

USERNAME, PASSWORDについてはコピペのまま実行しないでくださいね!

インスタにログインができないので笑

like_hashtag.py

from selenium import webdriver
from selenium.webdriver.chrome.options import Options # オプションを使うために必要
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.action_chains import ActionChains
import time
import random

from dotenv import load_dotenv
# .envファイルの内容を読み込みます
load_dotenv()

import os

import sys

import sqlite3
import re

def login():
    driver.get('https://www.instagram.com/accounts/login/?source=auth_switcher')
    f=open('insta.txt','a')
    f.write("instagramにアクセスしました\n")
    f.close()
    time.sleep(1)
    username = os.environ['USERNAME']
    password = os.environ['PASSWORD']
    driver.find_element_by_name('username').send_keys(username)
    time.sleep(1)
    driver.find_element_by_name('password').send_keys(password)
    time.sleep(1)

	#ログインボタンを押す
    driver.find_element_by_class_name('L3NKy       ').click()
    time.sleep(random.randint(2, 5))
    f = open('insta.txt','a')
    f.write("instagramにログインしました\n")
    f.close()
    time.sleep(1)

def tagsearch(tag):
    instaurl = 'https://www.instagram.com/explore/tags/'
    driver.get(instaurl + tag)
    time.sleep(random.randint(2, 10))
    f = open('insta.txt','a')
    f.write("listtagより、tagで検索を行いました\n")
    f.close()
    time.sleep(1)

def clicknice():
    target = driver.find_elements_by_class_name('_9AhH0')[9]
    actions = ActionChains(driver)
    actions.move_to_element(target)
    actions.perform()
    f = open('insta.txt','a')
    f.write("最新の投稿まで画面を移動しました\n")
    f.close()
    time.sleep(1)

    dbname = os.environ["DBNAME"]

    try:
        driver.find_elements_by_class_name('_9AhH0')[0].click()
        time.sleep(random.randint(2, 10))
        f = open('insta.txt','a')
        f.write("投稿をクリックしました\n")
        f.close()
        time.sleep(1)
        post_text = driver.find_element_by_class_name("C4VMK")
        post_contain = post_text.find_elements_by_tag_name("span")[1].text
        post_contain_plane_format = re.sub('\s', '',post_contain)
        print(post_contain_plane_format)

        conn = sqlite3.connect(dbname)
        cur = conn.cursor()

        cur.execute('select * from instagramContents where post_content=?;', (post_contain_plane_format, ))
        print(cur.fetchall())

        #新しくいいねするものだけを処理
        if not cur.fetchall(): 
            driver.find_element_by_class_name('fr66n').click()
            f = open('insta.txt','a')
            f.write("投稿をいいねしました\n")
            f.close()
            time.sleep(1)
            cur.execute('INSERT INTO instagramContents(post_content) values(?)',(post_contain_plane_format, ))
            conn.commit()

        for i in range(random.randint(200, 300)):
                try:
                    driver.find_element_by_class_name('coreSpriteRightPaginationArrow').click()
                    f = open('insta.txt','a')
                    f.write("次の投稿へ移動しました\n")
                    f.close()
                    time.sleep(random.randint(random.randint(2, 5), random.randint(10, 15)))

                except WebDriverException:
                    f = open('insta.txt','a')
                    f.write("2つ目の位置でエラーが発生しました\n")
                    f.close()
                    time.sleep(5)
                    cur.close()
                    conn.close()

                try:
                    post_text = driver.find_element_by_class_name("C4VMK")
                    post_contain = post_text.find_elements_by_tag_name("span")[1].text
                    post_contain_plane_format = re.sub('\s', '',post_contain)
                    print(post_contain_plane_format)
                    cur.execute('select * from instagramContents where post_content=?;', (post_contain_plane_format,))
                    print(cur.fetchall())
                    if not cur.fetchall(): 
                        cur.execute('INSERT INTO instagramContents(post_content) values(?)',(post_contain_plane_format, ))
                        conn.commit()
                        #新しくいいねするものだけを処理
                        driver.find_element_by_class_name('fr66n').click()
                        f = open('insta.txt','a')
                        f.write("投稿にいいねしました\n")
                        f.close()
                        time.sleep(2)
                except WebDriverException:
                    f = open('insta.txt','a')
                    f.write("3つ目の位置でエラーが発生しました\n")
                    f.close()
                    cur.close()
                    conn.close()

                print("いいね回数 : ", i+1)

        cur.close()
        conn.close()

    except WebDriverException:
        f = open('insta.txt','a')
        f.write("エラーが発生しました\n")
        f.close()

        cur.close()
        conn.close()
        return

if __name__ == '__main__':
    taglist = ['かわいい女の子']  ####### ここに自分の好きなハッシュタグを記載 #######
    option = Options()
    # option.add_argument('--headless') 
    driver = webdriver.Chrome(options=option, executable_path='google_drive/chromedriver')
    time.sleep(1)
    login()
    tagsearch(random.choice(taglist))
    clicknice()
    driver.quit()
    sys.exit()

db_init.py

from dotenv import load_dotenv
# .envファイルの内容を読み込みます
load_dotenv()

import os

import sqlite3

dbname = os.environ["DBNAME"]
conn = sqlite3.connect(dbname)
cur = conn.cursor()

# instagramContentsというtableを作成してみる
cur.execute('CREATE TABLE instagramContents(id INTEGER PRIMARY KEY AUTOINCREMENT, post_content STRING);')
conn.commit()
conn.close()

ファイルの作成は完了です!

次に、前回の記事を参考にDBにテーブルを作りましょう!(詳しくは前回記事を参照)

pythonの実行python db_init.py

 上記のpythonを実行すると下記のようなファイル構造になります。

ファイル構造

likebot      
├  .env      
├  like_hashtag.py   
├  db_init.py   

├  insta_post_contents.db <= 追加される

└ google_drive     

       └  chromedriver

 このファイル構造の状態で、like_hashtag.pyを実行します。

pythonの実行

python like_hashtag.py

 この時、macでセキュリティエラーが出るかもしれませんが、問題ないのでそのまま実行を続けてください。(必要であればセキュリティエラーを取り除いてください)

 ここまでできれば最初の実行結果イメージのように動作します!

 お疲れ様でした!

感想

今日はseleniumを使ったインスタいいねの自動化を行いました。

 コード自体は非常にシンプルなものですが、それ以外で考えることが非常に多かったなと思いました。

 chromedriverのインストール、DBの作成、インストール・実行時のセキュリティ管理(警告が出た際に対応)など「コードを書いて実行する」以外の部分でやることが多々ありました。

 こういったコード以外の部分でつまることが多いので、皆さんも気をつけて。

 今日の記事の内容は以上です。

 今日もブログを読んでくださり誠にありがとうございます。

 それではまた後日!

おまけ

googledriveのインストール方法詳細

まずGoogle Chromeのバージョンを確認してください。 

google chromeの右上の3つの・が縦に並んでいるところをクリック

② 設定をクリック 

chromeについてをクリック 

①~③を行って頂くと、google chromeのバージョンが確認できます。

google driveインストールほうほう

先ほど調べたgoogle chromeのバージョンのものをダウンロードしてください。 自分のバージョンのChromeDriverがなければ、そのバージョンの次に古いバージョンの ChromeDriverを入れてください。 

上の写真のgoogle chromeバージョン : 86.0.4240.80に対応するChromeDriverが無いのでそれより一つ古いChromeDriver 86.0.4240.22をダウンロード してください。

 以上が、chromedriverのインストール方法です。

【コピペでできるpython】簡易DB「sqlite」を使ってテーブルを作ってみよう!

sqlite tableを作る

こんにちわ!ゆきとです。

 

今日は簡易DBであるsqliteを使ってテーブルを作っていきます

超絶初歩的な内容ですが、超絶大事です。基礎本当に大事。

 

この記事の中はターミナルでコマンドが打てること、エディタでソースコードがかけることを必須条件としています。少しでも「ターミナルからコマンド打てるかな..」、「エディタでソースコードかけるかな..」と感じたのであれば、先に下記の記事を読んでからもう一度こちらの記事を読み直すことをおすすめします!

 

ターミナルでコマンドを打てるようにするための勉強記事

www.yukiyukiponsu.work

 

エディタでソースコードをかけるようにするための勉強記事

www.yukiyukiponsu.work

 

以上の前提を踏まえ、本題に入っていきます。

 

完成後のイメージ

まず完成後のイメージからつかんでください

実行結果

 

はいっ!これで終了です!笑

最終的にこんな感じになると思っていただければ、とりあえずOKです。 

 

では一緒にテーブルを作っていきましょう

テーブルを作る手順

テーブルを作成するためのコードを作成&実行

好きな場所にdb_init.pyファイルを作成し、下記をコピペしてください

db_init.py

import sqlite3

dbname = "instagramDB"
conn = sqlite3.connect(dbname)
cur = conn.cursor()

# instagramContentsというtableを作成してみる
cur.execute('CREATE TABLE instagramContents(id INTEGER PRIMARY KEY AUTOINCREMENT, post_content STRING);')
conn.commit()
conn.close()

db_init.pyファイルを実行します

pythonの実行python db_init.py

テーブルの中身を確認

テーブルを作成後、テーブルの中身を確認します。(何もデータを入れてないので、何も返ってきません。エラーが出なければ成功です!)

 

テーブルの中身を確認するために打つコマンド3つ

  1. sqlite3 instagramDB
  2. select * from instagramContents;
  3. .schema

感想

今回は簡易DB「sqlite」を使ってテーブルを作ってみました。かなり簡単に作れたなと感じた方が多いのではないでしょうか?

 

よかったら「簡単」、「ちょっと苦戦した」などのコメントいただけるとありがたいです!

 

余談ですが、皆さん疑問に思ったのではないでしょうか。なぜDB名がinstagramDBなんだろうと。

 

実は最近インスタの自動いいねボットを作りまして、そのアウトプットの一部として今回の記事を作成しています。

 

また、インスタの自動いいねボットも記事を作成しようと思いますので、みなさん楽しみにお待ちください!

 

自動いいねでSNS攻略するのだ!

 

今日の内容は以上です。

 

今日もブログを読んでくださり誠にありがとうございます。

 

それではまた!

【初心者向け】お金持ちになりたい人が真っ先に伸ばすべき「力」とは?

 

https://cdn.pixabay.com/photo/2017/07/25/01/22/cat-2536662__480.jpg

おはようございます。ゆきとです。

 

みなさんお金持ちになりたいですよね。でも、どうやればお金持ちになれるかを考えたことはありますか?

 

私は漠然と事業をつくってめっちゃ商品を売ってお金持ちになる!みたいな考えしかできていませんでした笑

 

今回は、この私のように漠然にお金持ちになりたいという方に、まずお金持ちになりたいのならこの考え方を持つする必要があるという考え方とその実践方法について、両学長のyoutubeを通して一緒に学んでいきましょう!

参考にしたコンテンツ

何を : Youtubeで両学長のお金の勉強【初級編】の学習

www.youtube.com

感想・学んだこと

 

結論

お金持ちになりたいのなら真っ先に手をつけるべきことは「貯める力」を伸ばすことです。

貯める力 = 支出を減らす力

 

まず自分の貯める力のレベルを測りましょう!

貯める力の測り方はこの3つの指標のバランスを見ることです。

 

①貯蓄額、②貯蓄率、③生活の満足度

 

①貯蓄”額”というのは、ためた金額のことです。

年間30万円貯めたAさん、年間50万円貯めたBさんを見るとBさんの方が金額的には貯められています。

 

貯めた金額でみるとBさんの方が優秀です。

 

②貯蓄”率”というのは、稼いだ金額からためた金額の割合のことです。

Aさんの手取り年収 300万円だとすると、年間30万円貯めたら、貯蓄率は10%,、Bさんの手取り年収が1000万円だとすると、年間50万円貯めたら、貯蓄率は5%

 

貯蓄率でみるとAさんの方が優秀です。

 

さらに、①貯蓄額、②貯蓄率に加え、③生活の満足度も気にする必要があります。

貯蓄をするために、人生の満足度が極端に下がってしまっては意味がないですよね笑

 

求められるのは、バランス感覚です

 

自分の心の声に向き合って、自分が大切だと、重要だと思う支出は残す。これは無駄だな、くだらないなと思う支出を削り、生活の満足度を下げずに支出を下げることが必要になります。

 

この貯蓄額、貯蓄率、生活の満足度も高い人 = 貯める力の高い人と言えるのです!

 

具体的に貯める力の高い人のイメージは、手取り年収450万円、生活費は年間300万円、貯蓄額は150万円、貯蓄率は33%、生活に不満はない。こういう人だそうです。

 

個人的には、上記の例は”貯蓄エリート”の方の例なので気にせず、一般的に貯蓄率20%を超えればとても優秀ということなので、ひとまず貯蓄率20%を目指すというのでいいと思います。

 

この貯める力を上げることは誰でもできて即効性のあるもので、誰でも継続さえすれば、必ず結果が出るものです(実践してそう思いました)。

 

ですので、皆さんも今日からコツコツ始めていきましょう!目指せ貯蓄率20%

アクションプラン

 自分の手取りの月収から10%〜(できれば)20%貯金する。

 

ちなみに私の例だと、手取り月24万円で、月の支出は17万円です。つまり月7万円を貯蓄しているので、月の貯蓄率は30%程度です。

 

私の貯める力、結構優秀なのかもしれないです笑

まとめ

今日は、お金持ちになりたい人が真っ先に伸ばすべき「力」とは?についてぎゅっとまとめました。

 

結論、お金持ちになりたい人が真っ先に伸ばすべき「力」とは?

「貯める力」を伸ばすことです。

 

そのためにアクションプランとして、ひとまず月の貯蓄率10%〜20%を目標に生活をしていきましょう!

 

もちろん友達とのご飯とか、自分の人生に大切なものにはお金を使ってくださいね!

節約ばっかだと楽しくないので..笑

 

ブログを読んでくださり誠にありがとうございます。

 

それでは今日もいってらっしゃーい。また明日!

【無意識】ついついお金を払ってしまう「5つの罠」行動経済学

https://cdn.pixabay.com/photo/2020/09/16/19/46/martin-fisher-5577331__480.jpg

おはようございます。ゆきとです。

 

突然ですが、みなさんお金がたまらないなと感じたことないですか?

 

そんなに贅沢なものを買っているわけではなく、日々の食事も豪勢なものではない。そんな状況でなぜお金がたまらないのでしょうか?

 

その理由を両学長のyoutubeを通して一緒に学んでいきましょう!

参考にしたコンテンツ

何を : Youtubeで両学長のお金の勉強【初級編】の学習

www.youtube.com

感想・学んだこと

普通に生活していて、お金がたまらない理由は「人間はアホなので、それほど合理的に行動できない」ことにあります。

 

つまり、企業が「人間はアホなので、それほど合理的に行動できない」ことを知っていて、それに基づいて少し工夫すれば、うまくモノやサービスを売り付けられるということです。

 

なぜそのようなことが起こるのかをみていきましょう!

消費者心理につけこむ5つのテクニック

1.無料の罠

「タダになる」という条件を組み合わせて、合理的に考えれば、「これ以上出費すべきじゃない」という状況で追加でお金を出させること

 

例) 通販で「あと300円で送料無料」というときに、ついつい後300円分の商品を買ってしまうなど

 

対策方法

この無料の罠にはまらないようにするには、「タダより高いものはない」という昔ながらの戒めを、心に刻んでおくこと。タダとは一見お得に見えても、結局、後々相応の対価を払うハメになりがち

2.フレーミング効果

同じ情報なのに、表現が変わると印象が変わる効果

 

例)「この手術の成功確率は90%です」 or 「この手術の成功確率は10%です」このように同じことを言っていても多くの人にとっては前者の方より安全に見える。

タウリン1000mg配合!! => いや、それ1gやんなど

 

対策方法

自分が目にしている広告は企業が考え抜いた最高のアピールであり、消費者に製品をよく見せようと趣向を凝らしたものであると理解すること

3.感応度逓減性(ていげんせい)

基準になる金額の大きさによって同じ金額の価値が変わってしまうこと。

 

例)日常生活で使う50万円と、家を買う時の3000万(オプションなし)=> 3050万円(オプションあり)で捉え方が変わってしまう。日常生活では間違いなく高額な50万円という数字が、家というさらに高額なものによってその50万円という価値が低く見えてしまう。

 

対策例

お金の価値は絶対的な価値として捉える必要がある。どんな時でも1000円は1000円。基準点は動かさない。

4.おとり効果

商品と比較対象になる商品を別に作り、「買おうかな買わないでおこうか」という選択肢ではなく、「どっちを買おうかな」という心理状況に持っていくこと

 

例) ①ぬいぐるみAだけを売っている、②ぬいぐるみAパターン + ぬいぐるみBパターン。②の時、自然とどっちを買おうかなという心理におちいりませんか?それです。

 

対策例

「どう売られているか」ではなく、「自分が欲しいかどうか」だけに集中してものを買う

5.極端回避性

人間の心理的に商品価格の両極端を回避する性質がある。

 

例) サーバー代 ロリポップ月額250円、Conoha 月額800円、 Xサーバー 月額900円と3つあれば真ん中のConohaを選んでしまうという傾向にあるということ

 

対策例

自分には何が必要なのか、自分は何が欲しいのか。自分目線の軸を、絶対にぶれさせないこと。

他人の用意したモノサシで世界を見てしまうと相手の買って欲しいものを買うハメになる

アクションプラン

企業がこういった罠を使って私たち消費者からお金を取ろうとしている現実を受け止め、自分がものを買う時にこういった罠にハマっていないかを見直す。

 

自分の価値観にあう、自分の欲しいものだけを買うようにする!

まとめ

今日は、ついついお金を払ってしまう「5つの罠」行動経済学についてぎゅっとまとめてみました。

 

その中で一番大事なことは「自分を陥れようとしている罠を知った上で自分で考えて行動する」ことです。

 

皆さんも誰かが言ったものではなく、自分が欲しいものを買いましょうね!

 

ブログを読んでくださり誠にありがとうございます。

 

それでは今日もいってらっしゃーい。また明日!

【新しいピアボーナスサービス】社員と経営層が偶発的にコミュニケーションをとれるサービス「HeyBoss」

Hello World, どうもゆきとです。

 

気付けば、1ヶ月ぶりの記事の投稿となってしまいました。

 

というのも、この1ヶ月はシェアハウスで出会った人たちと新規事業の設計・開発、受託開発の両方を行っており、とてもバタバタしていました。せわしくも楽しい日々を送っております。

 

さて、それでは冒頭の挨拶はこれくらいにして本題に入っていきます。

 

本日、新しいサービス「ランチマッチングサービス HeyBoss」をリリースしました!

 

今回は一人で作ったものではなくシェアハウスの人たちと作ったものなので、是非皆さんに知っていただきたいと思い、記事を書いてしまいました笑

 

(販売につながれば嬉しいですが、それ以上に自分がずっと挑戦しているという姿勢を読者の方に見せたいというのが本音です笑)

 

さてそれでは実際にどんなサービスなのか、またサービスを作るに至った経緯を踏まえ紹介していきます!

ランチマッチングサービス「HeyBoss」

「HeyBoss」を作ろうと思ったエピソード

最近私の勤めている会社で、一つ上の先輩が2人やめるということがおきました。

 

先輩は「自分のやりたいことがこの会社ではできない」から辞めるとおっしゃっていましたが、それはおそらく本質的な問題ではないように感じてしまいました。

 

そもそも、本当に自分のやりたいことがこの会社ではできないと感じてやめるのであれば、それはもっと前にやめていると思います。

 

(もちろん外的要因は色々あり、それに応じてやめた可能性がありますが、以前お話をさせていただいた時に特にそのような話はなかった)

 

つまり、実態は「在宅ワークによる会社への帰属意識の爆発的な低下から起こる仕事のモチベーションの低下」が原因で、そのモチベーションの低下に対する処方箋がなかったことが離職を招いたのではないかと仮説を立てました。

 

実際に先輩は「週一で会社行くのめんどくさいな」、「仕事のフィードバックの機会がすくない」などとリモートワーク以前に比べ、会社・仕事への不満を呈していました。

 

さらに、同期の子も「リモートワークになって気軽に質問できなくなったし、仕事どんな感じで進めていいかわからない..全然フィードバックの機会もないし..」など不満を呈することがかなり増えてきています。

 

このままだと人はやめるし、従業員満足度は下がる一方なので、なんとかできないかなと思っていた時、たまたま私が会長(社長の一つ上の役職)を誘って、ご飯に連れていってもらった時に、会長に元気付けていただいたことを思い出しました。

 

「ゆきとくんはそのままでいいと思う。誰に対しても臆することなく発言できるのは本当に長所。応援してる」

 

この言葉を頂いてからもう少し仕事がんばろうと思えました。何より会長が自分のことを見ていてくれたことが何より嬉しかったです。

 

それ以来、多少ではあるものの”会社への帰属意識”が芽生えました。さらに会長に「上司にアウトプットを出してもレビューをくれない」と相談すると、実際に上司にかけあってくださり、その後、上司がレビューをしてくれるようになりました。

 

もちろん私の実例を出しているのにすぎないので、こんなにうまくいくことは少ないかもしれません。

 

ただ、現実として私はこれでうまくいったので、この体験を皆さんにも味わって欲しいと思いました。

 

そうして作られたサービスがランチマッチングサービス「HeyBoss」です。

 

私はこのサービスが、コロナによるリモートワークでも”若い世代の離職率を減らし”、さらに”会社での人間関係に不満を持つ人を減少させる”ツールとして機能すると確信しています。

「HeyBoss」の概要

Slackなどのチャットツールと連携して使えるサービスで、社員の方と経営層の方を偶発的にマッチングし、今まで生まれなかったであろうコミュニケーションの機会をランチを通じて創出します!

 

先程のエピソードにも書いたようにこのサービスは、コロナによるリモートワークでも”若い世代の離職率を減らし”、さらに”会社での人間関係に不満を持つ人を減少させる”ことができます。

 

詳しくは以下のリンクからホームページを見てください!

「HeyBoss」のホームページ

heyboss.tokyo

「HeyBoss」の使い方

使い方はリンク先に書いてある通りなので、ここではどんな感じで使われるのかをデモとして流します。

f:id:yukiyukiponsu:20201011134435g:plain

 コロラドさん(経営層)

山本龍我さん、長尾直義さん(社員)

 

経営層1名 + 社員2名をDBから抜粋してランダムにマッチングさせています。

 

ここはお客様の問い合わせ内容次第で別途料金をいただきつつ、カスタマイズして提供させていただこうと画策中です。

カスタマイズ例 : googleカレンダーとの紐付け、メールでの配信など

 

*デモでは分かりやすいようにボタンでマッチングをしていますが、本来は指定した時間(12:00など)にマッチングを開始してくれます。

 

細かい部分の確認は下記のお問い合わせからお願いします!

docs.google.com

 

今日の内容は以上です!

 

今日もブログを読んでくださり誠にありがとうございました!

 

それではまた!

 

【3分でわかる】13歳からのアート思考の要約

こんにちわ。ゆきとです!

 

今日は、末永 幸歩さんの著書「13歳からのアート思考」について要約していきます!

 

お忙しい方でもさくっと読めるので、通勤時間や隙間時間にインプットとして利用していただければと思います!

 

それでは早速本書の結論からお伝えします。 

結論

 「正解を見つける力」から「答えをつくる力」へ

本書の結論はこの一言につきます。次に本の要約です。

要約

「あなただけのかえる」の見つけ方
  • 現状
    • 美術館に足を運ぶ多くの人が、作品を「鑑賞」するのではなく、作品の情報と実物を照らし合わせる「確認作業」を行ってしまっている
      • 例 : 美術館で「モナリザのほほえみ」を見るときに、”作者はレオナルド・〇〇で、女の人が微笑んでいる絵画である”といった確認をしてしまっている
    • つまり、「自分なりのものの見方・考え方」などとはほど遠いところで、物事の表面だけを撫でてわかった気になり、大事なことを素通りしてしまっている
      • 結果として大衆と同じ考えになってしまっている
  • あるべき像
    • 「自分なりの視点」を持って物事を視る必要がある。
      • だからこそ、大人の学びの世界でも「アート的なものの考え方」を見直すべきなのである

 

このあるべき像の中の「アート的なものの考え方」= アート思考(= アーティストのままでいられる大人になるための方法)を理解する必要があります。

 

そのアート思考を理解するためにも、アーティストがどのようにして、目に見える作品を生み出しているのか。その過程をみていきます。

 

  1. 「自分だけのものの見方」で世界をみつめ
  2. 「自分なりの答え」を生み出し
  3. それによって「新たな問い」を生み出す

 

つまり、アーティストは、”自分の内側にある興味をもとに自分のものの見方で世界をとらえ、自分なりの研究を続ける人”であり、本書の結論 ”「正解を見つける力」から「答えを作る力」”へをまさに体現しているといえます

 

このアーティストの考え方がアート思考です。

 

で、このことから本書の結論である”「正解を見つける力」から「答えをつくる力」へ”、つまり、"アート思考を身につけよう"ということに繋がるわけです。

 

さてそれでは具体的なメソッドへ!..と言いたいのですが、本書では実際の絵画の写真を使ったワークを交えて、一ステップごとにアート思考を身につけていくことができます。

 

私がここで要約するよりも遥かに効率のいいインプット + アウトプットになるので、ここまでの要約をみて少しでも興味がでた方は絶対買った方がいいです。

 

本書は、本当にアートの見方、関わり方が大きくかわる一冊となっています。

 

今まで500冊以上の本を読んできた私が、読まないと損をすると絶賛するレベルの良書です。

 

是非是非お手にとってみてください!

後書き

筆者がこの本を読んで思ったことを、ここにつらつらと書きます。本を読んだ後の考察などに使っていただけると幸いです。

私のアートに対する考え

 

アートとは、その人が自分の考えを体現するためのものなので、そこに美がなくてもいいと思う

だからこそ、アートでないものは人間の干渉がおよばないものである

つまり、水、空気などはアートではない

 

ただ、この考え方は決して正解じゃない

結論アートとは、自分で定義していくものであると思う

 

自分で考えて創造していく、このことに価値がある。全ての物事には矛盾があり、その矛盾ごと愛するようになれれば世界を多面的に見れるようになる

何が正解か、何が不正解かなんて存在せず、自分の中で確固たる価値観を持っていないとダメだと決めつける必要もない

 

この混沌とした世界の中で自分はどう思うのか、どうしたいのかを自分自身で考えて行動していき、その中で学んだことが自分を構成していく。ただそれだけ

 

つまり、「人生に正解の道はなく、あるのは自分の考えに基づいた行動が作ってきた道だけであり、これからの道は今の自分が全て作り出す」

 

こういうことではないかと私は考えました。皆さんはどう考えますか?

少し理解が難しい部分もあると思いますが、それも含めて今回のブログを楽しんでいただければ幸いです。

 

今日もブログを読んでくださり、誠にありがとうございます!

 

それではまた後日!

【コピペでできるGO言語】youtubeの検索結果を取得してみよう!

GO言語

こんにちわ。ゆきとです!

 

今日はGo言語を使ってyoutubeから検索結果のデータを取得していこうと思います!

 

Goでやる必要がないって?そのとおりです。

なんならpythonでやった方が圧倒的に速く作れるし、参考文献もいっぱいあるし..something..

 

それでも俺は!!Goで作りたかったんだーーーー!

 

茶番はここまでにして早速作っていきましょう。

 

www.yukiyukiponsu.work

環境

事前準備

今回youtubeの検索結果を使用するにあたってGCPを使うのでGCPの登録をお願いします!

Google Cloud Platform

あとで必要になるAPIキーをもうここで発効しちゃってください!

APIキーの作成

実行結果

まずどんなものができるかをイメージしてください!

 

 今回のプログラムでは、指定したキーワードをyoutubeで検索させ、その検索結果を一つだけ取得するプログラムとなっています。

実行結果

それでは実際のソースコードをみていきましょう!

ソースコード

.envを使用する上で必要なライブラリをまずインストール

go get github.com/joho/godotenv

.env

DEVELOPER_KEY = "先ほどコピーしたAPIキー" 

test_youtube_api.go

package main

import (
	"os"
	"fmt"
	"log"
	"time"
	"net/http"
	"io/ioutil"
	"github.com/joho/godotenv"
)

func main() {
	developer_key := get_developer_key()
	youtube_search_list := search_youtube_list(developer_key)
	fmt.Println(youtube_search_list)
}

func get_developer_key() string{
	//.envファイルの読み込み
	err := godotenv.Load()
	if(err != nil){
		log.Fatal("Error loading .env file")
	}
	
	developer_key := os.Getenv("DEVELOPER_KEY")
	fmt.Println(developer_key)
	return developer_key
}

func search_youtube_list(developer_key string) string{
	url := "https://www.googleapis.com/youtube/v3/search"
 
	request, err := http.NewRequest("GET", url, nil)
	if err != nil{
		log.Fatal(err)
	}
	
	//クエリパラメータ
	params := request.URL.Query()
	params.Add("key", developer_key)
	params.Add("q", "洋楽")
	params.Add("part", "snippet, id")
	params.Add("maxResults", "1")

    request.URL.RawQuery = params.Encode()
 
	fmt.Println(request.URL.String()) //https://jsonplaceholder.typicode.com/todos?userId=1
	
	timeout := time.Duration(5 * time.Second)
	client := &http.Client{
        Timeout: timeout,
	}
 
	response, err := client.Do(request)
	if err != nil{
		log.Fatal(err)
	}
	
	defer response.Body.Close()
 
	body, err := ioutil.ReadAll(response.Body)
	if err != nil {
		log.Fatal(err)
	}
 
	// fmt.Println(string(body))
	return string(body)
}

これで終了です!

 

コンパイルして、実行すると先ほどの実行結果のようになります!是非試してみてくださいね!

おまけ

ちなみにフォルダの構成的にはこうなってますー

test_go

|- .env

|- test_youtube_api.go

 

以上です!

 

今日もブログを読んでくださり誠にありがとうございます!!

 

少しでも参考になれば幸いです!

 

ではまた後日!

参考資料

Go コード サンプル  |  YouTube Data API  |  Google Developers

【Go】.envファイルをGolangでも使用するためのライブラリ「godotenv」 - Qiita

GoでGETによるリクエスト [parameter][http.Get][http.Client]