wgetコマンド使い方

wgetとは

ウェブページからコンテンツをダウンロードする際に利用します。 よくある利用例としてはウェブサイトのページをダウンロードしたり、 画像を取得したりします。

 使用方法

Macから使うにはwgetコマンドをインストールする必要があります。

$ brew install wget

して下さい!

ウェブページ保存方法

$wget http://www.yahoo.co.jp #yahoo 取得

 ファイル名を指定するには

-O オプションを使う

$wget http://www.yahoo.co.jp -O yahoo.html #yahoo 取得

 特定のファイルを保存するには

-i オプションを使う

$wget -i *.gif http://www.yahoo.co.jp -i *.gif #yahoo 取得

簡単ですが、以上となります。

サーバーコマンド

サーバー利用

先日、サーバーを利用したので、その際に用いた コマンド及び、(これから使うであろう)コマンドを 備忘録として残しておきます。

Topコマンド

Topコマンドを用いると、システム全体の負荷・メモリ稼働状況が 把握出来るようです。 以下にコマンド例を記載します。

$top #CPU順にソート

$top -a (shift + m) #メモリ順にソート

その他、有益と思われるコマンド

df #ディスクの空き容量を把握

free #メモリの空き容量

サーバーについては勉強中なので、継続して更新していきます。

新しいファイルを何個も作るには

UNIXコマンドでファイル作成

僕は新しいファイルを作る際、GUIを通じて行っていました。

普段使う際は問題ないのですが、大量のファイルが必要なときは問題になりますね。 例えば1〜99のjsonファイルを作る際にはいちいち、マウスを使って作るのは非効率ですね。 なんで、備忘録としてUNIXコマンドで出来るファイル作成方法をまとめておきます。

例① 1.json作成

$ touch 1.json

連番も出来るみたいです。

例② 1.txt、2.txt作成

$ touch {1..2}.txt

もっと複雑にしたい場合はrubyなどのプログラミング言語 を使ったほうが良さそうです。 その場合は ダブルクオートを使って制御すればOKです。

例③ 偶数はjson 奇数はtxt作成(ruby ver)

count = 0
10.times{

  if count % 2 == 0
    `touch #{count}.json `
  else
    `touch #{count}.txt `
  end

  count += 1
}

Curlコマンド

はじめに

Curlコマンドを少し勉強しましたのでブログで整理を行っていきます。

HTTPアクセス

本題に入る前にHTTPについて整理を行ったほうが通りが良いので整理してます。 HTTPとはWebサーバーとWebブラウザなどのクライアントがデータを送受信する際のルール(取り決め)です。

つまり、HTTPアクセスとはWebサーバーとブラウザなどがHTTPでデータ送受信を行うことを示します。

ちなみにHTTPSはHTTP Over SSL/TLSの略で、暗号化をしてデータの送受信を行うことを意味しています。 HTTPSのおかげでデータを悪用されないため、安心して(?)ネットショッピングなどが行えます。

Curlコマンドとは何か

本題に戻ります。まずは言葉の定義から説明致します。 CurlとはClient for URLの略で 「URLで示される場所からデータを様々なプロトコル(HTTPなど)を用いて送受信することができるプログラムおよびコマンド」を意味しています。

具体的に言うと、コマンド上で、特定のURLに紐付いたファイルのダウンロードを行ったりすることが出来ます。

ターミナルからソフトインストールを行う際、Curl〜といった言葉が出てくることがあります。 あれはHTTPリクエストによりインストールするファイルをダウンロードしているんです。

実践してみる

前回作ったSinatra GETCurlコマンドを用いて実行してみます。

まずは前回実行したファイルをローカルで立ち上げます。 curlコマンドでのGET、POSTは簡単です。 ターミナルで「curl」+ URLを書けばOKです。以下に実行例を記載します。

$curl http://localhost:4567/form?get_name=test

実行例

https://gyazo.com/f666300fb32493bcb0755963bea0677f

コマンドプロンプトからCURL、URLを打たなくても、Google ChromeからCURLコマンドを取得することも出来ます。

chrome

https://gyazo.com/5fbfc11c43bcc272566fa572186713c5

Sinatraに出会った

初体験

先日Sinatraというフレームワークを触ってみたので頭の整理がてらカキコします。

Sinatraとは

Rubyフレームワークです。フレームワークRailsと捉えられやすいですが、 SintraもRuby界では有名なようですね(失礼!)

第一印象

「え、これってフレームワークなんですか??」っていうぐらいの簡素です。 Sinatra公式Rails公式を比較すると、 非常に簡素なのがわかりますね!

Sinatraの魅力は簡素なため、しっかりと理解しないと コードがかけないという利点(苦笑)があります。

以下ではSinatraを題材にして紹介を行っていきます。 環境設定はググるといっぱいあるので、説明は割愛します!

ビューの表示方法

Sinatraはルーティングが非常に大切です。

Railsでもありますが、 ルーティングとは HTTPメソッドとURLマッチングパターン(パス) が一致した際に行うアクションを規定したものです。

ルーティングは以下のような形で記述します。

get / do      #getメソッドパスは「/」

    処理
end

※HTTPメソッドとはクライアント(ブラウザ)が行いたいアクション (Get、Postなど)をサーバーに伝えることです。

※URLマッチングパターンとあるように正規表現を使ったり、 ワイルドカードを使うことも出来ます。

※ルーティングには2つの記述方法があるようですが、 シンプルなクラシックスタイルで記述しています。

HTTP GETメソッド 個人メモ

yahoo.co.jpをみたいとしたらchrome(もしくはIE、もしくはFireFoxもしくはsafari)さんにhttp://www.yahoo.co.jp と入力し、「enter」を押します。

これはブラウザを通して、GETメソッドとしてサーバー側にリソースの取得をお願いしていることです。 で、ブラウザ上でホームページが見れるのはサーバーさんがビュー表示をブラウザさんに返しているということ。

Hello World

手軽なものを実行してみます。

hello-world.rb

require 'sinatra'

get '/' do
  erb :hello
end

順に説明します。

require 'sinatra'

と記述することでHTTPメソッドが使える+実行すると、Webrick実行(サーバー立ち上げ)してくれます。

get '/' do
    erb :hello
end

クライアント側が/method get(リソースの取得リクエスト)を 行った際のアクションを記述しています。 上記は / のアクセスをした際にerb形式のhello.erb(シンボルで表記するので「:」を付け加える)を出力しろと記述しています。

./view/hello.erb

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>hello</title>
</head>
<body>
  hello sinatra
</body>
</html>

実行は当該ディレクトリで ruby hello.rb するだけでサーバー(Webrick) が立ち上がります!

実行結果

https://gyazo.com/79bdc382beb8ffc747d4a4f27b7c703b

get、post(Params)

次にget、postメソッドを使ってみます

form.rb

post '/form' do
  @post_name = params[:post_name]
  erb :form
end

get '/form?:get_name?' do
  @get_name = params[:get_name]
  erb :form
end

get、post形式で、パラメータを渡す際はparamsで受け渡しが行われます。 Railsでもおなじみですね。

view(抜粋)ですが、以下のようにしときます。

./view/form.erb

  <h1>シナトラ</h1>
  <form action="" method="post">ポスト
    <input type="text" name = "post_name">
    <input type="submit">
  </form>

  <form action="" method="get">ゲット
    <input type="text" name="get_name">
    <input type="submit">
  </form>

  <% if @get_name %>
    <div>
      ゲットしました。<br>
      こんにちわ<br>
      <%= @get_name %>さん
    </div>
  <% elsif @post_name %>
    <div>
      ポストしました。<br>
      こんにちわ<br>
      <%= @post_name %>さん
    </div>
  <% end %>

ビューにはform.rbで定義されたインスタンス変数が渡されます。

実行結果

https://gyazo.com/570cfdbadb1c8bbc2a685ba03bbfd6b1

最後に

ここでは紹介しませんでしたが、rubyの代表的なDB Gemである 「Active Record」 も使いました。今回Sinatraを使うことでDB、ビューの理解が非常に理解が進み、感動しました。

というのも、

ここ一ヶ月 Railsを勉強してなんというか

サービス作るには Rails new して、DB作るには、Rails generate ・・・っていう風に

「コマンドゲー」 ぽい感じで作業していて、 プログラミングに対するモチベーションが 下がっていく一方だったんです。 それもこれも僕が初心者なんで、理解が不十分なまま、使っていたのが起因なんですがm( )m

そんな状況下でSinatraを触ってコードを書いていくと「受け身」にならずに「能動的」にコードを書く事が出来て理解が進むと同時にプログラミングを楽しむことが出来ました。

これからも、gemの試しなどSinatraを積極的に利用していこうと思います!

JSON

 先日、JSONを扱う機会がありました。 復習も兼ねて定義及びRubyのコード例を元に頭の整理をしていきます。

JSONとは

まず、恒例の「定義通り」の説明をします。 JSONとはJavaScript Object Notationの略です。 テキストベースのデータフォーマットで 多くのプログラム言語でカバーされているため、 ブラウザ(JS)−サーバー(PHPPythonなど)間でのデータ交換において 使われ、記述が容易(後述)なのでメジャーなデータ・フォーマットです。

表記方法

方法は2つあります。

1つ目が「配列型」 JSON例①

["python", "Ruby", "HTML"]

2つ目が「オブジェクト型」 JSON例②

{"gsacademy":"プログラミング学校","プログラミング経験": "ruby"}

またオブジェクト型の中に配列を入れ子にするとことも出来ます。 ここでは紹介しませんが逆も行えます。ここでは「入れ子型」 とでも名づけておきます。

JSON例③ 「入れ子型」

{"gsacademy":"プログラミング学校","学生番号":"18",
"プログラム経験":[{"Ruby":"1ヶ月"},{"Python":"3ヶ月"}]} 

JSONに入れられる値の型はboolean,string,number等が入るので特に意識せず使えそうです。

使用方法

 一般的なサーバー言語ではJSONフォーマットのまま、使用  出来ないため、一回各言語のフォーマット形式に合わせた配列、連想配列へ変換して使用します。

JSON

JSONデータをRuby用に変換(パースと呼ぶ)を行うには JSONモジュールにある parse (もしくは load ) を用います。

require 'json'
 
data_json = 
'{"gsacademy":"プログラミング学校","プログラム経験":"ruby"}' #オブジェクト型

data_json2 = 
'["gsacademy","学生番号","プログラム経験","ruby"]'  #配列型

#入れ子型
data_json3 = 
'{"gsacademy":"プログラミング学校","学生番号":"18",
"プログラム経験":[{"Ruby":"1ヶ月"},{"Python":"3ヶ月"}],
"好きなFW":[{"Ruby":"SinatraとRailsしか知りません。。。"},{"Javascript":"riot"}]}' 

print data1["gsacademy"].to_s + "\n"  #出力->プログラミング学校
print data2[3] + "\n"             #出力->ruby
print data3["好きなFW"][0]["Ruby"] #出力-> SinatraとRailsしか知りません。。。

Python

ptyhonの例は以下となります。

宗定先生

Pythonも勉強しよー

では。

タイムスタンプとは何か

ある日の研修

タイムスタンプ(正確にはUNIXタイムスタンプ) を使う機会がありました。

これは「1970年1月1日」UTC時点からの経過秒数(整数型) を示すものだそうです。

恥ずかしながら初めて聞く単語だったので、 まとめておきます。

使用方法

以下ではRubyを用いてタイムスタンプを使用してみます。 現時刻から変換するには以下の通りとなります。

例1 タイムスタンプ使用

print Time.now #出力→2016-09-12 22:58:48 +0900
print "\n" #改行
print Time.now.to_i #出力→1473688728
                 #1970年1月1日からの経過秒数
print "\n" #改行

上記のTime.nowは Time型 を表しています。 Time型→タイムスタンプの変換は .to_iをつけるだけです。 また、タイムスタンプは 整数型 を表しています。

用途

こんなことやって何か意味あるの??って思う人も いるかもしれません。 少なくとも私は思ってました。

ですが、前述したようにタイムスタンプは整数型なので、 時間帯を比較する際には簡潔にコードを書くことができ、 非常に有効です。

次項では、 「入力した日付が現時刻と比較して過去ではないか検証する」 コードを例に説明を行います。

コード例

例2 現時刻と入力値比較

require 'time'

print "予約日を入力して下さい\n例)2016年10月22日\n"
enter_time = ((gets.chomp).split(/[年,月,日]/)).join("-")

if enter_time
  if Time.parse(enter_time).to_i >= Time.now.to_i
    print Time.parse(enter_time).to_i
  else
    print "今日の日付より過去です\nもう一度入力して下さい。\n"
  end
end

コードが長くなったので順を追って噛み砕いて説明します。

1行目

require 'time'

→組み込みではないtime ライブラリを 用いることによりありがたーい機能(後述します)が使えます。

2-3行目

print "予約日を入力して下さい\n例)2016年10月22日\n"
enter_time = ((gets.chomp).split(/[年,月,日]/)).join("-")

→予約日入力メッセージを出力し、 「2016年10月23日」といった風に入力すると、 「2016-10-23」と変換されるようにしています。

残り

 if enter_time #入力を受け取る
  if Time.parse(enter_time).to_i >= Time.now.to_i #比較
    print "予約承りました"
  else
    print "今日の日付より過去です\nもう一度入力して下さい。\n"
  end
 end

→Time.parseはtimeライブラリの機能です。timeライブラリは   組み込みで入っていないので、require timeをする必要があります。  この機能により、色々な表現(2016-10-22や2016/10/22)  をTime型に変換してくれます。  そしてto_iをつけてやると現時刻との比較が簡単に  行なえますね。  

※補足 タイムスタンプ型→Time型への変換はTime.atを使います。  

まとめ

タイムスタンプを用いないと例2は場合分けが多くなります。 (私の力では・・・)

一方、例2のコードはスッキリしてますね(^^)