Ruby

amazon_link.rb

@tsut

script

    # use Format link as org-mode on Chrome browser.
  require 'clipboard'

  link = Clipboard.paste
  link.match(/\[\[https:\/\/www\.amazon\.co\.jp(?:\/.*)?\/(?:dp|product)\/(\w{10}).*\]\[Amazon(?:\.co\.jp)?(?:\s?(?:\||:)\s)(.*)\]\]/)

  if $1 && $2
     Clipboard.copy(%Q[{{< amazon asin="#{$1}" title="#{$2}" >}}]) # 実際の使用の際は"/*" "*/"を外す
     puts %Q[#{Clipboard.paste} が clipboard に入ったよ〜]
  else
     puts %Q(Check! Clipboard, press [M-y])
  end

変更履歴

  • 2024/12/03: amazon.co.jp/dp パターンに対応
  • 2024/11/18: 正規表現の変更(dp|product)と(\||:)など
  • 2024/11/09: amazon_link.rbを抜き出す。正規表現をちょっと変更。

example

example_1

link

[[https://www.amazon.co.jp/%E3%81%9D%E3%82%89%E3%81%9D%E3%81%86%E3%82%84-%E5%8D%98%E8%A1%8C%E6%9C%AC-%E9%BB%92%E5%B7%9D-%E5%8D%9A%E8%A1%8C/dp/4120058352/ref=sr_1_1?dib=eyJ2IjoiMSJ9.TC_AIKR0Y1knl64SMxUkY2Dy_JBtQ07x0bdozqo4m3wpSje5ubc9rrZFuO-uxYws7Ck9iNZYb2YLhqatEohN8xPXoknP-fqMlmU8I7As4mKiWMA-xdPris3pFv6by4bjaU2pOGT7ha--k4L24j7rh1PyBVryLiD1jvHbRfgVpw-bSHsvrYTfJj0-fOVYLLx2-aAHmEWMfyZkzTtPmeosXDJEBr-MJN_rjMkmPbO4-Jc1sE3bZVFSZOEctWaGllRkDAqF35nBYbOZk_N3Ct4yu8ujjaOdcKBGA4tkmRKaN4g.P3p3JvqO4opZV8PLDk01FoT4R4tbM2Wfpc4GOBxYRrA&dib_tag=se&keywords=%E9%BB%92%E5%B7%9D&qid=1731119937&sr=8-1][Amazon.co.jp: そらそうや (単行本) : 黒川 博行: 本]]

result

source
{{< amazon asin="4120058352" title="そらそうや (単行本) : 黒川 博行: 本" >}}
sample
そらそうや (単行本) : 黒川 博行: 本
そらそうや (単行本) : 黒川 博行: 本 amazon.co.jp

example_2

link

  [[https://www.amazon.co.jp/%E3%82%BF%E3%82%AB%E3%83%93%E3%82%B7%E5%8C%96%E5%AD%A6-%E3%82%AB%E3%82%A4%E3%83%AD%E7%94%A8NT%E3%83%99%E3%83%B3%E3%82%B8%E3%83%B3-500ml/dp/B005CIVO78?pd_rd_w=l2kWN&content-id=amzn1.sym.cd47c52a-1e28-4096-8155-47f0b4df2bea&pf_rd_p=cd47c52a-1e28-4096-8155-47f0b4df2bea&pf_rd_r=YPX29E65CY57QSW77FRD&pd_rd_wg=z1hN4&pd_rd_r=5e242759-dc85-4ff9-930b-a6481a155388&pd_rd_i=B005CIVO78&ref_=pd_bap_d_grid_rp_0_1_ec_pr_bnp_bia_i&th=1][Amazon | タカビシ化学 カイロ用NTベンジン 500ml | タカビシ化学 | 使い捨てカイロ]]

result

source
  {{< amazon asin="B005CIVO78" title="タカビシ化学 カイロ用NTベンジン 500ml | タカビシ化学 | 使い捨てカイロ" >}}
sample
タカビシ化学 カイロ用NTベンジン 500ml | タカビシ化学 | 使い捨てカイロ
タカビシ化学 カイロ用NTベンジン 500ml | タカビシ化学 | 使い捨てカイロ amazon.co.jp

2024-10-04 Friday

@tsut

今日の一行ニュース

所信表明 「石破カラー」封印なぜ - Yahoo!ニュース

何も変えられない。何も変えさせない。

今日のhugoさん

アマゾン アフィリエイトのショートコードを作るスクリプト。

amazon_link.rb

適当な名前…。 ChromeのFormat link拡張でorg-mode用のリンクをクリップボードに入れる設定の人、つまり俺、が対象。クリップボードに入ったリンクを加工する。

2024-07-27 Saturday

@tsut

今日のあれこれ

雨雲レーダーに翻弄されて出かけそびれた。オリンピックの開会式観たり、録画番組観たり。

今日のでっち上げ

chromebookで、なんでかeasy-hugo.elが動かない。M-x easy-hugo-newpostできないのは面倒なので、やっつけ仕事った。

      # ruby easyHugoNew.rb
      # filename
      myfilename = "journal.org"
      # entryを置く場所
      mypath =  "~/blog/content/posts"
      # 時刻取得
      time = Time.now
      # タイトル用日付
      mytitle = time.strftime("%Y-%m-%d %A")
      # ISO8601拡張形式 JST 2024-07-28T22:00:00+09:00
      mydate =  time.strftime("%Y-%m-%dT%R:%S+09:00")
      # format time to slug
      myslug = time.strftime( "%Y%m%d%H%M" )

      # path+filename
      mypost = "#{mypath}/#{myslug}.#{myfilename}"
      # fileを作る
      file =  File.open(File.expand_path(mypost), "w")

      # front matter
      myheader = <<EOF
      ,#+title: #{mytitle}
      ,#+subtitle: hogemoge diary
      ,#+date: #{mydate}
      ,#+publishdate: #{mydate}
      ,#+lastmod:
      ,#+categories[]: journal
      ,#+draft: true
      ,#+tags[]: memo
      ,#+author: @tsut
      ,#+slug: #{myslug}
      EOF

      # front matter を書き込む
      file.puts myheader

      file.close

どうでしょう?

hugo_insert_image.rb

@tsut

画像をリサイズして取ってくるやつその2

  require 'rmagick'
  require 'date'
  require 'fileutils'
  require 'optparse'
  # gem install clipboard; 要 gem
  # sudo apt install xsel; 要 xsel
  require 'clipboard'

  # default resize 大きさ = 480
  mysize = 480

  opt = OptionParser.new
  opt.on('-r', '--resize VALUE', 'リサイズする大きさ(px)') { |v| mysize = v.to_i }
  # opt.on('-t', '--target DIR',   '出力先ディレクトリ') { |v| target = v.to_s }

  begin
     opt.parse(ARGV)
  rescue OptionParser::InvalidOption => e
     abort "無効なオプション指定が含まれています"
  end

  # 移動先は /yymmdd/
  date_dir = %Q(#{Date.today.strftime("%Y%m%d")})
  # target_dir = ~/blog/static/images/yymmdd
  target_dir = File.expand_path("~/blog/static/images/#{date_dir}")
  # ディレクトリが無ければ作る
  FileUtils.mkdir_p(target_dir) unless File.exist?(target_dir)

  ARGV.each do |f|
     if File.extname(f).downcase =~ /.jpe?g|.png/ then #add .png
        img = Magick::ImageList.new(f)
        # mysizeより小さい画像は大きくなるのでresizeしない。
        img = img.resize_to_fit(mysize,  mysize) if [img.rows,  img.columns].max > mysize
        img = img.auto_orient.strip!
        image_file_name = %Q(#{File.basename(f, ".*")}.webp)
        img.write(target_dir + "/" +  image_file_name)
        # Clipboardにshortcodeを入れる 実際の使用には '/*'と'*/'を削除する必要あり
        Clipboard.copy(%Q({{< figure src="/images/#{date_dir}/#{image_file_name}" alt="" title="" width="#{img.rows}" height="#{img.columns}" >}}))
        # メッセージ
        puts %Q[#{Clipboard.paste} が clipboard に入ったよ〜]
     end
  end

変更履歴

2024-10-14 Monday

画像サイズを指定する

満年齢早見表

@tsut

満年齢早見表

rubyです。どうでしょう?

  require 'date'
  this_year = Date.today.year
  def wareki(y)
     nengo_eiji_kanji = { 'M' => '明治',
                          'T' => '大正',
                          'S' => '昭和',
                          'H' => '平成',
                          'R' => '令和'}
     # 大晦日現在の年号を得る
     input = Date.new(y,12,31).jisx0301
     input = input.split(".") # ["R06", "12", "31"]
     nengo = input[0].split(//) # ["R", "0", "6"]
     nengo[0] = nengo_eiji_kanji[nengo[0]]
     nengo = nengo.join
  end
  def eto(y)
     eto = '子丑寅兎辰巳午未申酉戌亥'.split(//)
     eto = eto[y.modulo(12)-4]
  end
  120.times do |i|
     year = this_year - i
     # printf("%3d年前\t", i)
     # puts "#{year}年\t#{wareki(year)}年"
     # printf("%s年(%s) %d年 %3d歳\n" ,wareki(year), eto(year), year, i)
     printf("%d年 %s年(%s) %3d歳\n" ,year, wareki(year), eto(year), i)
  end

画像をリサイズして取ってくるやつ

@tsut

そういうツール作ってみた。よくありがちなやつとは思うが for my hugo ってことで。

オプションでサイズと場所を指定できる。(たぶん使わない。)

# coding: utf-8

require 'rmagick'
require 'date'
require 'fileutils'
require 'optparse'

# default resize 大きさ = 480
mysize = 480

# ターゲットディレクトリ
target = "/home/tsut/blog/static/images/"

opt = OptionParser.new
opt.on('-r', '--resize VALUE', 'リサイズする大きさ(px)') { |v| mysize = v.to_i }
opt.on('-t', '--target DIR',   '出力先ディレクトリ') { |v| target = v.to_s }

begin
   opt.parse(ARGV)
rescue OptionParser::InvalidOption => e
   abort "無効なオプション指定が含まれています"
end

# サイズ指定
# mysize = 480
width = height = mysize

# 移動先は /yymmdd/
prefix = "#{Date.today.strftime("%Y%m%d")}"
targetdir = target + "/" + prefix + "/"
# ディレクトリが無ければ作る
FileUtils.mkdir_p(targetdir) unless File.exists?(targetdir)

ARGV.each do |f|
   if File.extname(f).downcase =~ /.jpe?g/ then
      img = Magick::ImageList.new(f)
      # EXIF情報を削除してリサイズ
      img_new = img.strip!.resize_to_fit(width, height)
      # img_new = img.blur_image(20.0, 10.0)
      img_new.write(targetdir + "#{File.basename(f)}")
   end
end

RMagickが入らないでござる…の巻

@tsut

環境は wsl2 の debian sid、ruby は rbenv で入れた2.7.4。

追記: Ubuntu 20.04.3 on wsl2 ,ruby 2.7.4p191 でもほぼ同じ手順で RMagick をインストールできました。

❯ gem install rmagick
Building native extensions. This could take a while...
ERROR:  Error installing rmagick:
        ERROR: Failed to build gem native extension.

    current directory: /home/tsut/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/rmagick-4.2.3/ext/RMagick
/home/tsut/.rbenv/versions/2.7.4/bin/ruby -I /home/tsut/.rbenv/versions/2.7.4/lib/ruby/2.7.0 -r ./siteconf20211014-1879-j0t0tw.rb extconf.rb
checking for brew... no
checking for pacman... no
checking for Ruby version >= 2.3.0... yes
checking for pkg-config... yes
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found

MagickCore.pc が見つからないって言ってるらしい。 ぐぐるとRMagickが入らなくて苦労したってヒトむっちゃいるじゃん。