代々木で働く超新米エンジニアの足跡

代々木で働くエンジニアです。超新米です。

Ruby

Ruby on Railsとは

Ruby on Railsとは Ruby on Railsとは、Rubyで構築された、Webアプリケーション(後述)開発のためのフレームワーク簡単に言うと、Webアプリケーションを作るためのツール Webアプリケーションとは Webブラウザを介して利用するアプリケーション -Webサイトと…

flatten

flatten 多次元配列をシンプルな配列にする array = [1, 2, 3, [4, 5]] p array.flatten #=>[1,2,3,4,5] 参考:flatten, flatten! (Array) - Rubyリファレンス

combination

combination 配列から引数n個の要素を選んだときの組合せを出力 array = ["a","b","c","d","e"] p array.combination(2).to_aa~eまでの、5C2の全てのパターンを出力

DBに絵文字を入れる時の設定

DBに絵文字をいれる エンコーディングがUTF-8だとエラーがおきるので #カラムの文字コード変更 alter table table1 modify comment text character set utf8mb4 #テーブルの文字コード変更 alter table table1 default character set utf8mb4; #DBごと変更 a…

配列別の書き方

配列の普通じゃない書き方 array = %w(one two three four) p array # => ["one", "two", "three", "four"] 参考:Rubyで%記法(パーセント記法)を使う - Qiita

ギリシャ文字のスクレイピング

ギリシャ文字(特殊な文字)をスクレイピング スクレイピングをしていたら”Ⅱ”が取得できなかったのでとまった 解決方法 doc = Nokogiri::HTML(page, ur, "CP932") エンコードをCP932で指定したらできた参考:CP932など特殊な文字を含むHTMLをスクレイピングす…

今週の月曜日を取得

今週の月曜日を取得 require 'date' this_day = Date.today this_monday = this_day - (this_day.wday - 1) 参考:今週の月曜日、先週の月曜日、来週の月曜日を取得する - Qiita

メソッドの複数の戻り値とその取得

メソッドの複数の戻り値を設定とその取得 def test 処理 return A, B end a,b = test #=>ここでA,Bの値をa,bに取得 参考:多重代入を使って複数の戻り値を取得 - メソッド - Ruby入門

日付の計算 足し算 引き算

日付の計算(加減法) require "date" d = Date.today #=>今日の日付を取得 afterDay = d + 1 #=>今日の日付 + 1日の日付を取得(つまり明日) beforeDay = d - 5 # =>今日より5日前の日付を取得

文字型からdate型に変える

require 'date' date = Date.strptime('2014年6月2日','%Y年%m月%d日') 参考:文字列型からDate型に変換する - Qiita

pluck(データベースの特定のカラムを配列として取得)

pluck selectやwhereで取得してきたものは型が”ActiveRecord_Relation”になっているので 配列として取得したいときに使う title = Title.where(:type => "A") #typeからむがAのものをすべて取得 p title.pluck(:name) #上で取得してきたものの名前のみを全て…

カラムの追加とデフォルト設定

カラムの追加とデフォルト設定 カラムに追加するときデフォルトの値を設定する方法 alter table titles add crawl int(11) default 0;

update(Activerecordを用いてカラムの更新)

update 既存のデータのカラムの更新をするときにつかう title = Title.find_by(:title => "わっしょい") title.update(:num => 1) まず、更新したいデータの行全体を取得しなければならない 今回は1行目でtitleがわっしょいのものを取得してきた(1つのみ) …

find_by (データベースから条件に合致するもの1つを取得)

find_by Title.find_by(:title => "data") タイトルというカラムがdataのものを1つ取得するない場合はnilが返ってくるので、合致するデータがあるかないか判断するときに便利

open_uri_redirections

open_uri_redirections httpからhttpsへのリダイレクトされるURLをopen-uriで取得しようとするとでエラーが発生するopen_uri_redirectionsというgemをインストールして解決参考:[Ruby] open-uriでhttp->httpsのリダイレクトが禁止されている件 - Qiita

配列の最後だけ抽出

array = ["a","b","c"] p array.last # => "c"

配列の比較

配列同士を比較して差の内容を出力 array_1 = ["a","b","c"] array_2 = ["a","b"] puts array_1 - array_2 cが出力される参考:https://teratail.com/questions/1422

文末の文字を削除 -chop-

chop 文末一文字を削除できるhttp://ref.xaio.jp/ruby/classes/string/chop

compact each_with_index include?

compact 配列からnilを取り除くhttp://ref.xaio.jp/ruby/classes/array/compact each_with_index と 配列の中に配列を加える eachを使いながら、数が増える変数を使える zikan.each_with_index do |zikangumi,i| if zikan_array[i].nil? zikan_array.push([]…

each_with_index

File.open("meibo4.csv","w") do |file| row.each_with_index{|k, i| file.puts "#{k[0]},#{k[1]},\"#{k[2]}\"" } end ファイルに書き込みながら、配列に同じ動作を繰り返しインデックスをつけるrowは配列 rowのものがkにはいる iは0から順に数が増えていく…

join

join 配列の中の要素をくっつける引数を指定すると、それ区切りでくっつけてくれる arr = ["hello", "world", 123] puts arr.join(", ") puts arr.join

二重配列 each ソート chomp

二重配列 配列の中に配列がある each 配列の中身1つ1つにある処理を実行したいときに使う ソート row2 = row.sort { |a, b| a[2] <=> b[2] } 配列の2番目の要素で小さい順にソートしている chomp 文字列の最後の改行を取り除く

ハッシュの書き方の例

hash = {"Yamada" => 34, "Katou" => 28, "Endou" => 18} puts hash["Katou"] 参考:http://www.rubylife.jp/ini/hash/index2.html

split 正規表現 配列内の平均値 ファイルの読み込み

split 配列の中身を特定の文字で分離する #タブで区切った text.split(" ") 正規表現(2桁の数字) /(\d{2})/ 配列内の平均値 array = [12,343,112,55,74,11] puts array.inject(0.0){|r,i| r+=i }/array.size 参考:http://unageanu.hatenablog.com/entry/20…

変数

グローバル変数 $num インスタンス変数 @num

rand 文字列に変数を代入 include

rand 0~4までのランダムの数字を返す rand(5) 1~10までのランダムの数字を返す場合 rand(10)+1 参考:http://qiita.com/Konboi@github/items/e53296e99e297f83cfd1 文字列中に変数を入れる puts "文字列#{hensu}" 参考:http://www.rsch.tuis.ac.jp/~ohmi/ruby…

breakとnext

breakとnext breakはブロック処理を終了 #5を飛ばす 10.times{|v| if v==5 next end puts v } #出力 #0 #1 #2 #3 #4 #6 #7 #8 #9 nextは1回の処理を飛ばす 10.times{|v| if v==5 break end puts v } #出力結果 # 0 # 1 # 2 # 3 # 4 参考:rubyのblock文でのbr…

ifを1行 gsuv

if を 1行で書く 処理 if 条件 gsub マッチした文字と指定した文字を取り替える s = "hello,\nworld\r\n" puts s.gsub(/(\r\n|\r|\n)/, "<br />") # => hello,<br />world<br /> 参考:gsub, gsub! (String) - Rubyリファレンス

tweet全件削除 API

tweetを全件削除 API # -*- coding: utf-8 -*- require 'twitter' # アプリケーションキー 個人ごと consumer_key = "hogehoge" consumer_secret = "hogehoge" access_token = "hogehoge-hogehoge" access_token_secret = "hogehogehogehoge" # 認証 client …

文字列中の一部を取り出す 制限API

文字列中の一部を取り出す str = "Hello" ans = str[0,3] ansにhellまでが格納される。 開始と終わりの番号を引数にする参考:文字列の一部を取得する - 文字列(String)クラス - Ruby入門 制限APIの考え方 1日に回数制限のあるAPIを使うときは、sleepで24h休…

ActiveRecord データベース デーブルの存在 一覧 Ruby

テーブルの存在の確認 puts ActiveRecord::Base.connection.table_exists? 'DB名' 参考:ActiveRecordでTableの存在をチェックする | hrendoh's memo テーブルの一覧表示 ActiveRecord::Base.connection.tables 参考:ActiveRecord を使って好きなデータベース…

緯度経度から住所 geocoder

緯度経度から住所を割り出す geocoderのインストール gem install geocoder require 'geocoder' #日本語に設定 Geocoder.configure(:language => :ja) #住所取得 puts Geocoder.address("緯度,経度") 緯度経度のところにそれぞれの長ったらしい数字を書く 参…

同じ単語を数える 変数で正規表現

テキストファイルを読み取って同じ単語をカウントする count = Hash.new(0) filename = ARGV[0] file = open(filename) while anything = file.gets something = anything.split something.each do |things| count[things] += 1 end end file.close ## 結果…

length nil empty 曜日を日本語表示 git request pull marge

length,sizeが使えない datetime型だと、length,sizeが使えなかった(NoMethodErrorになる)ので オブジェクト.where(date:Date.today,).each do |box| if !(box["Time"].length == 0) get.push("box["Time"]}") end end これで、データベース側のTimeのカラム…

<Ruby>正規表現で都道府県を一致させる スクレイピング ログ 不要な空白削除strip

都道府県を一致させる 今回は都道府県の前に空白があるのでこうした。 addr = "東京都" addr.match(/\S{2,3}[都道府県]/).to_s #=>東京都 /Sは、空白を除く {2,3}は2~3文字 参考:【Ruby】住所から都道府県を正規表現で取り出す【正規表現】 - Qiitaログ ログ…

新規ファイルを開いて書き込む ファイルを2つ開いて書き込み モード

新規ファイルを開いて書き込む file_name = "新しく作りたいファイル名.txt" File.open(file_name,"w"){|同じもの| #wは書き込みモード 同じもの.puts "書き込みたいこと" } ファイルを2つ開いて書き込み File.open('outfile.log','w'){|outfile| #outfile.l…

Ruby 例外処理 rescue

例外処理 begin rescue begin <例外が起こる可能性のある処理> rescue => <例外オブジェクトが代入される変数> <例外が起こった場合の処理> end どうしようもないエラーの時に使った 使いすぎたり、広い範囲でつかうとどこがエラーかわからなくなる参…

count uniq 正規表現 桁数範囲 inject map compact

配列関係 count 配列名.count 配列の要素の数をカウント参考:count (Array) - Rubyリファレンス 配列内の重複する要素を取り出す a = [1, 2, 3, 4, 5, 6, 5, 4] a.inject(Hash.new(0)){|h, key| h[key] += 1; h}.map {|k,v| k if v >= 2}.compact #=> [4, 5]…

次のページもスクレイピング sleep children 画像の個数

次のページもスクレイピング #省略 loop do #省略 unless doc.css('秘密').empty? url = doc.css('秘密').attribute('href').value p "----------" sleep(10) else break end end loop とunlessのブロックをくっつけて次のページまでスクレイピングできた参…

sinatra じゃんけん 変数 erb ruby

sinatraでわかったこと ファイルの読み込み #app.erb post '/choki' do erb :choki end これは、choki.erbファイルの読み込み erb : chokiのところをrbにしてもよみこめなかった。 URL require 'sinatra' get '/top' do "Hello" end get と do の間、 /topは…

twitterbot assert jsonファイル sinatraインストール

twitterbot作成中にでたエラー `to_s': wrong number of arguments (2 for 0) (ArgumentError) 引数の数がおかしいとでる。 実際は0だが、引数を2つわたしている。参考:Rubyist Magazine - Ruby ビギナーのための CGI 入門 【第 3 回】 ページ 2 asser_equa…

twitterbot作成のメモ gitでpushできないとき

twitterbot作成のメモ bot.timeline.userstream do |status| twitter_id = status.user.screen_name #アカウントID name = status.user.name #アカウント名 contents = status.text #つぶやきの内容 status_id = status.id #ツイート自体のID(つぶやきごとに…

テストコード インテンド クラス 正規表現 require

テストコードをやった。・インストール gem install test-unit 参考 : Ruby - Test::Unitでテストを書く - Qiita ・使い方 テストはファイルを分けておこなう テストしたい部分があるファイルをrequire_relative で読み込むclass Practice def self.greetin…

twitterbotを作る(じゃんけんプログラム)

ぐー、ちょき、ぱーのいずれかをリプライしたらランダムに何かを返し結果を報告するじゃんけんプログラムをつくったファイルを3つ用意した。 APIデータファイル、クラスファイル、実行ファイルAPIのファイルは、アカウント情報のようなものをかいてるだけな…

twitterbotを作る(rubyを介してのツイート)

twitterbotwをつくるAPI登録やインストールもろもろは以下を参考にした。初心者歓迎詐欺被害者の会: RubyでTwitter Botをつくる とりあえず、rubyを介してツイートしたい時はこれ require 'twitter' require 'pp' client = Twitter::REST::Client.new do |co…

スクレイピングまとめ

スクレイピング 概要 Web上の特定のデータを抽出すること 言語 Ruby require Nokogiri open-uri 方法 あるサイトに複数の記事があり、その記事のタイトル、urlをスクレイピングしたいとする。 はじめに必要なことは、そのタイトルとurlのセレクタを知ること…

時間のフォーマット

時間のフォーマットを変える時の参考 time = Time.now # Thu Dec 24 00:00:00 +0900 2011 time.strftime('%Y年%m月%d日 %H:%M:%S') # 2011年12月24日 00:00:00.to_time だとタイムゾーンが表示される