質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1179閲覧

WEBページから取得したhtml文書をMYSQLに保存できない(ruby)

kotakeshi0923

総合スコア28

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/08/24 18:07

編集2017/08/25 01:41

rubyの以下のコードで、MYSQLのTESTというテーブルのcontents列に、openで取得したhtml文書を挿入したいのですが、できません。
どのようにコーディングすればよいでしょうか?

現在は、Valueが読み込んだhtml文書以外の、簡単な文字列などでしたら保管できています。

<コード>
require 'open-uri'
require 'mysql2'
require 'openssl'

code=5001

url="https://stocks.finance.yahoo.co.jp/stocks/detail/?code=#{code}"

page = open(url, :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE) do |f| f.read end

client = Mysql2::Client.new(:host => "localhost", :username => "root")

client.query('CREATE DATABASE IF NOT EXISTS TEST;')

client.query('CREATE TABLE IF NOT EXISTS TEST.html (id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, contents text);')

client.query("INSERT INTO TEST.html (id,contents) VALUES (?,?)",page)

<エラー内容>
C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mysql2-0.4.9-x64-mingw32/lib/mysql2/client.rb:120:in merge': no implicit conversion of String into Hash (TypeError) from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mysql2-0.4.9-x64-mingw32/lib/mysql2/client.rb:120:in block in query'
from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mysql2-0.4.9-x64-mingw32/lib/mysql2/client.rb:119:in handle_interrupt' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mysql2-0.4.9-x64-mingw32/lib/mysql2/client.rb:119:in query'
from C:/pleiades/workspace/ruby/htmldownload.rb:17:in `<main>'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hotta

2017/08/24 22:07

コードとエラーそれぞれを範囲指定して<code>をクリックしてください。
m.ts10806

2017/08/25 00:39 編集

現在どの段階まで動作確認出来ているのかというところも追記願います。テーブル・カラムは正しく作られているのか、URLは開けているのか、HTMLは正しく取得できているのか、出力エラーメッセージは調べてみたのか、などなど。
kotakeshi0923

2017/08/25 01:28

ご回答ありがとうございます。現在は、Valueが読み込んだhtml文書以外の、簡単な文字列などでしたら保管できています。
m.ts10806

2017/08/25 01:32

ここでは埋もれてしまうので質問本文に追記をお願いします。
guest

回答1

0

ベストアンサー

エラー内容というより、コードのカタチで考えると

ruby

1#NG client.query("INSERT INTO TEST.html (id,contents) VALUES (?,?)",page) 2 3statement = client.prepare("INSERT INTO TEST.html (contents) VALUES (?)") 4statement.execute(page.to_s)

なんじゃないかと思います。

idはAUTO INCREMENTなのでINSERTでは指定しないと思います。
gem mysql2でプリペアドステートメントを.queryで使えるっていう話は知りません。
prepare(sql+?)でexecute(hoge)が基本かと思います。

あと、page.to_sはpageでも良いかもしれませんが、確認していないのでとりあえずto_sを付けておけばいいじゃんっていう適当な理由です。検証して取っ払ってもいいかもしれません。

投稿2017/08/25 17:09

oskbt

総合スコア1895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問