[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/13 18:23 / Filesize : 307 KB / Number-of Response : 1052
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 66



1 名前:デフォルトの名無しさん [2020/01/04(土) 01:15:34.30 ID:X7t3Qsuc0.net]
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ

質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 65
https://mevius.5ch.net/test/read.cgi/tech/1545421414/

るりまサーチ (リファレンス検索)
rurema.clear-code.com/

Rubyist Magazine - るびま
jp.rubyist.net/magazine/

逆引きRuby
www.namaraii.com/rubytips/

Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

672 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 10:22:22.84 ID:UVmFgkue0.net]
JS は最近まで、基本型であるハッシュも無かった

皆、オブジェクトをハッシュの代わりに使っていたけど、
__proto__ という属性名を使うと、バグってしまう

こういう事も知ってる香具師は、まずいない。
標準機能が少なくて、自作すると、様々な引掛けに掛かってしまう

var myObj = { };
str = 'abc';

myObj[ str ] = 1;
console.log( myObj[ str ] ); // 1

str = '__proto__';

myObj[ str ] = 2;
console.log( myObj[ str ] ); // 2 ではなく、{ }

673 名前:デフォルトの名無しさん [2020/08/12(水) 10:28:49.86 ID:0iqLL9pv0.net]
Railsは、PHP全盛期に誰が使っても大穴が開かないから人気があっただけでさ
Node.js等に優秀なフレームワークが出そろった今ではもう、使う価値はほとんどないよ・・・・

674 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 12:33:47.08 ID:RMBTHnXK0.net]
>>644
あらさがしもいいとこ。
識別子に「__」を混ぜるヤツなんかそうそういねえ。

675 名前:643 mailto:sage [2020/08/12(水) 12:51:13.63 ID:UVmFgkue0.net]
使っている単語を集めるアプリで、__proto__ が使われていたら、バグる

Haxe では、この仕様を回避するために、すべての属性名の先頭に、@ を付けていた。
@abc, @__proto__ みたいにする

でも、__proto__ も、ブラウザが慣習として使っているだけのもので、
規格で決まっているわけでもないので、変わるかも知れない

もし変わったら、突然アプリがバグってしまう

各社が、勝手に決めている部分も多いから、プログラミングしにくい。
言語の標準機能が少ないから、配列の便利な操作でも、
Lodash など外部のライブラリを使うしかない

676 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 13:21:10.21 ID:/qrw2h6bM.net]
標準なのかRailsの独自拡張なのかの区別すら困難なほどにRailsにクソミソに汚されたRubyの悪口はやめなさい
少なくともJSにおいては、標準ライブラリを汚すような行儀の悪いライブラリが広く一般的に使用されたりはしていない

677 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 13:25:19.87 ID:kGuev0jHr.net]
TSでいいじゃない 人間だもの

678 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 14:24:08.46 ID:HozojyCs0.net]
暑くなるとどのスレにも変なのが湧くね
知ってて批評する

679 名前:分にはいいけど知ったか批評しかなく中身がない []
[ここ壊れてます]

680 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 15:43:20.47 ID:8Nm8vDB1M.net]
unixの世界では0がtrue、1を含むそれ以外がfalse。

慣習よりも実益が上回るなら、慣習に従う必要なんてない。

Swift、Kotlin、Go、Rustらのメジャーな新言語で0や1をそのまま真偽値として使える言語は一つとしてないのは、JSのtruthy/falsyはバグの温床だから。



681 名前: mailto:sage [2020/08/12(水) 17:03:15.03 ID:UG+oufucH.net]
>>651
それはシェルが扱う「プログラムの」返値のときで、しかも意味は 0 が正常終了、1 が非正常終了、と、ちょっと違う

682 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 17:41:31.55 ID:RMBTHnXK0.net]
>>652
testコマンドでは、0が真、それ以外が偽。

>>651が「unixの世界」とか言ったからややこしいけど、シェルだけの話でもない。

683 名前: mailto:sage [2020/08/12(水) 17:54:35.78 ID:UG+oufucH.net]
>>653
test コマンドの実体が外部の実行ファイルなら、それは >>652 のいうところの「プログラムの返値」‥‥@
test コマンドがシェルの内部に埋め込まれている場合もある(例えば bash)‥‥A

@Aいずれの場合も「シェルの話」なのでは?

684 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 18:29:24.32 ID:RMBTHnXK0.net]
>>654
「終了」だけの話じゃないから。

685 名前:デフォルトの名無しさん [2020/08/13(木) 10:20:15.54 ID:m1xh97jBF.net]
>>652
unix とか shell とか C の関数とか
戻り値の扱いが統一されてないのは不自然だよね

686 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 11:02:33.72 ID:HLH3bdVq0.net]
>>656
コマンドの終了コードは真偽の2値だけじゃないから。
わかりにくいといえばそうだが、しかたない。

687 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 11:27:21.81 ID:+ydphYXd0.net]
>>651
それは真偽値じゃなく、0が成功、0以外がエラーで、番号でエラーの種類を表しているだけ。
Unixでは、誕生の時から、Cと二人三脚だったが、Cはもともと1が真、0が偽だった
わけだから、Unixも当然、1が真、0が偽。
エラー番号は、真偽値とは直接関係が無く、Unixとは関係ないMS-DOSや
PC-8801のアセンブラの世界でも、0が成功、0以外でエラーの種類を表すことが
多かった。なぜかといえば、それが効率が良かったから。
当時のCPUは非力だったので、そのように1つの整数で多くの情報を表すと、
飛躍的に体感速度が上がったからそうなっていた。

688 名前:デフォルトの名無しさん [2020/08/13(木) 19:09:06.75 ID:Tr7DEHMo0.net]
dllでchar* hoge(){

}

689 名前:デフォルトの名無しさん [2020/08/13(木) 19:11:24.89 ID:Tr7DEHMo0.net]
dllで
char* hoge(){
return msg;
}
ってやったのをrubyではどうやってうけとればいいんですか?
お願いします

690 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 05:15:39.54 ID:SCMnTycc0.net]
「ruby dll 呼び出し」で検索すれば?

ただ、Windows 用にコンパイルしても、正常に動くかな?



691 名前:デフォルトの名無しさん [2020/08/14(金) 15:59:11.59 ID:XKPWE/tlF.net]
ffi

692 名前:デフォルトの名無しさん [2020/08/14(金) 16:44:23.46 ID:MuRP3aMr0.net]
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "D:./myruby.dll"
extern "char* gethoge()"
end
ss = M.gethoge
puts ss

文字化けします

693 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 17:05:39.60 ID:B0hSR/wp0.net]
文字コードが違うんやろ。
変換すれば。

694 名前:デフォルトの名無しさん [2020/08/14(金) 17:27:30.3 ]
[ここ壊れてます]

695 名前:1 ID:MuRP3aMr0.net mailto: 変換のしかたがわからないのです []
[ここ壊れてます]

696 名前:デフォルトの名無しさん [2020/08/14(金) 17:28:37.41 ID:MuRP3aMr0.net]
dllはshiftjisです

697 名前:デフォルトの名無しさん [2020/08/14(金) 17:30:52.13 ID:MuRP3aMr0.net]
`require': cannot load such file -- ffi

698 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 17:44:20.45 ID:cCFmHkiX0.net]
>>663
ss = M.gethoge.force_encoding( Encoding::CP932 )

699 名前:デフォルトの名無しさん [2020/08/14(金) 18:18:09.19 ID:zY2s9ydfF.net]
ruby -Ks

700 名前:デフォルトの名無しさん [2020/08/14(金) 18:24:57.25 ID:MuRP3aMr0.net]
一通りやったのに問題解決しませんでした、諦めました
どうもありがとうございました



701 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 18:35:40.73 ID:5nafUaAcr.net]
dllがShift-JISでrubyがUTF-8でターミナルがWindows-32Jとかなんじゃねえの
情報を小出しにされたんじゃわかるわけない

702 名前:デフォルトの名無しさん [2020/08/14(金) 18:40:48.13 ID:MuRP3aMr0.net]
それです
ターミナルがよくわかりません

703 名前:デフォルトの名無しさん [2020/08/14(金) 18:42:22.56 ID:MuRP3aMr0.net]
ターミナルはshiftjisでした

704 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 18:58:09.61 ID:5nafUaAcr.net]
そもそも本当に文字化けなのか?
想定する文字列と
p ss
した結果は?

705 名前:デフォルトの名無しさん [2020/08/14(金) 19:03:22.47 ID:MuRP3aMr0.net]
#<Fiddle::Pointer:0x000000000313e7d0 ptr=0x00007ffea5c03038 size=0 free=0x0000000000000000>

706 名前:デフォルトの名無しさん [2020/08/14(金) 19:04:10.92 ID:MuRP3aMr0.net]
require 'fiddle/import'

module M
extend Fiddle::Importer
dlload "D:./myruby.dll"
extern "char* gethoge()"
end

p M.gethoge

system "pause"

707 名前:デフォルトの名無しさん [2020/08/14(金) 19:06:41.96 ID:MuRP3aMr0.net]
想定する文字列は「こんにちは!」です

708 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 19:07:56.76 ID:cCFmHkiX0.net]
p M.gethoge.encoding

709 名前:デフォルトの名無しさん [2020/08/14(金) 19:08:46.36 ID:MuRP3aMr0.net]
puts M.gethoge
だと
S0�0k0a0o0�

710 名前:デフォルトの名無しさん [2020/08/14(金) 19:10:43.30 ID:MuRP3aMr0.net]
>>678
undefined method `encoding' for #<Fiddle::Pointer:0x0000000002c42230> (NoMethodError)



711 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 19:16:58.97 ID:cCFmHkiX0.net]
p M.gethoge.to_s.encoding

712 名前:デフォルトの名無しさん [2020/08/14(金) 19:19:22.81 ID:MuRP3aMr0.net]
>>681
#<Encoding:ASCII-8BIT>

713 名前:デフォルトの名無しさん [2020/08/14(金) 19:21:07.40 ID:MuRP3aMr0.net]
#include <stdio.h>

char name[] = "こんにちは!";

extern "C" __declspec(dllexport) char* __stdcall gethoge() {
return name;
}

dll側です

714 名前:デフォルトの名無しさん (ワッチョイ 1e7d-yoZq) mailto:sage [2020/08/14(金) 19:28:01 ID:cCFmHkiX0.net]
puts M.gethoge.to_s.force_encoding( Encoding::CP932 )

715 名前:デフォルトの名無しさん (ワッチョイ dd5f-XQXO) [2020/08/14(金) 19:29:32 ID:MuRP3aMr0.net]
>>684
お!出ました!
ありがとうございました
助かりました

716 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 19:38:38.19 ID:5nafUaAcr.net]
hoge.dllコンパイルしてたら解決してた
良かったね

717 名前:デフォルトの名無しさん [2020/08/14(金) 19:58:30.98 ID:MuRP3aMr0.net]
>>686
ありがとうございました

718 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 22:28:15.31 ID:SCMnTycc0.net]
Windows で、Ruby を使うのは、CP932 で苦しむ。
ちょっとした処理でも、外部・CP932 → Ruby内部・UTF-8 → 外部・CP932

クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end

719 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 23:58:52.64 ID:sxmwfi0L0.net]
>>688
スクリプト/内部/外部のエンコーディングをCP932にすれば
CP932 -> UTF8とUTF8 -> CP932の変換や指定は不要

720 名前:デフォルトの名無しさん [2020/08/18(火) 19:07:20.91 ID:7fbjefcm0.net]
mechanizeのform送信を使って5chに書きこむことはできますか?

textareaにvalue値を入れ、submitし、承諾しますか?の画面まで行けたのですが、そこから同じようにsubmitしてもページ遷移が起こらずそのままみたいです



721 名前:デフォルトの名無しさん mailto:sage [2020/08/18(火) 19:31:46.44 ID:AGh/qXAtr.net]
>>69

722 名前:0
cookie
[]
[ここ壊れてます]

723 名前:デフォルトの名無しさん [2020/08/18(火) 19:53:02.69 ID:7fbjefcm0.net]
>>691
具体的にcoockieをどうすれば良いでしょうか?

724 名前:デフォルトの名無しさん [2020/08/18(火) 20:08:47.36 ID:h5vNCvfYF.net]
hanamogera
tepodon

725 名前:デフォルトの名無しさん mailto:sage [2020/08/18(火) 21:43:20.22 ID:HR/M/dGq0.net]
>>688
>Windows で、Ruby を使うのは、CP932 で苦しむ。
>ちょっとした処理でも、外部・CP932 → Ruby内部・UTF-8 → 外部・CP932

Rubyを生半可に知ったつもりの人にありがちな勘違いだな
まず、多言語化に対応した多くのプログラミング言語は、
内部エンコーディングとしてUTF-8を採用している、ここまでは間違いではない
しかしながらRubyは内部エンコーディングとして特定のエンコーディングを採用せず、

  文字列(String)オブジェクトの属性としてエンコーディング情報を保持する

方式を採用した
だから>>689氏が指摘しているように、エンコーディングをCP932で統一できるなら、
Rubyであれば 外部・CP932 → Ruby内部・CP932 → 外部・CP932 と
エンコーディングフリーなプログラミンングを実践できる

・Ruby 2.7.0 リファレンスマニュアル > 多言語化
 ttps://docs.ruby-lang.org/ja/latest/doc/spec=2fm17n.html
・Rubyのエンコーディング
 ttps://www.sl*d*share.net/tmtm/ruby-nseg30
・Rubyのエンコーディング
 ttps://tmtms.h*t*n*blog.com/entry/20120812/ruby_encoding

ありふれた言語、たとえばPythonであれば内部エンコーディンングはUTF-8固定だから:
>Windows で、Python を使うのは、CP932 で苦しむ。
>ちょっとした処理でも、外部・CP932 → Python内部・UTF-8 → 外部・CP932
という指摘は正しい

726 名前:デフォルトの名無しさん mailto:sage [2020/08/18(火) 22:19:28.71 ID:KlQrPk6/0.net]
CSI方式を採用した背景はこれ読むといいよ
https://jp.quora.com/Ruby-deha-naze-UCS-seiki-ka-wo-saiyou-shi-tei-nai-node-shou-ka/answers/141570426

↓こう書いとけばリテラルもI/OのデフォルトもCP932
#! /usr/bin/env ruby -E CP932:CP932
# encoding: CP932

727 名前:デフォルトの名無しさん mailto:sage [2020/08/19(水) 00:17:36.61 ID:45CsPPnjM.net]
エンコーディングのコストなんてIOに比べりゃ無視できる
ぶっちゃけRubyのやり方は百害あって一利無し

728 名前:デフォルトの名無しさん mailto:sage [2020/08/19(水) 00:28:27.54 ID:dM5o8vR90.net]
windowsのファイルシステムのエンコーディングを中途半端なままにしたことで、
windowsユーザーへの嫌がらせになった以外に何の意味もなかった

729 名前:デフォルトの名無しさん [2020/08/19(水) 01:42:46.33 ID:Ch6IfZIA0.net]
>>696
+1
ほんそれ

730 名前:デフォルトの名無しさん (ワッチョイ 9f33-KILr) mailto:sage [2020/08/19(水) 01:52:26 ID:zoQbwZV20.net]
>>697
Windowsのファイルシステムでは、あらゆるエンコーディングがうまくいってない気がするな。w
まあ、しょせんUTF-16だしな。
安全そうなところだけをつかったほうが安心。



731 名前:687 mailto:sage [2020/08/19(水) 02:07:17.75 ID:w/3evjlx0.net]
UTF-8 以外は実績が無いから、文字列処理とか、怖くて使えないだろ。
誰も使っていないから

文字列を、正しく数値に変換できるのかとか

IO の境界で、変換する方が安全だと思う

732 名前:デフォルトの名無しさん mailto:sage [2020/08/19(水) 02:33:17.91 ID:w/3evjlx0.net]
>>690
RubyでCookieの読み込みや保存を幸せにする(Mechanize&Selenium)
https://rooter.jp/web-crawling/ruby-cookie/

「ruby mechanize cookie」で検索すれば?

漏れは、selenium webdriver で、実際のブラウザを操作しているだけだから、
クッキーの事も、考えたことはない。
ブラウザが勝手にやる

プログラミングでは、入力して、ボタンを押すだけだから、簡単。
下は、yahoo のログインの例

driver.navigate.to "https://login.yahoo.co.jp/config/login_verify2?.src=ym"

element = driver.find_element(:id => "username")
element.send_key "ユーザー名"

driver.find_element(:id => "btnNext").click

element = driver.find_element(:id => "passwd")
element.send_key "パスワード"

driver.find_element(:id => "btnSubmit").click

733 名前:700 (ワッチョイ 1f2c-1yu9) mailto:sage [2020/08/19(水) 07:23:42 ID:w/3evjlx0.net]
selenium webdriver なら、これで、
この板のtest スレの、書き込み確認画面が出る。
ひょっとしたら、確認画面が出ないかも知れない

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new

options.add_option( :detach, true ) # ブラウザを切り離す
options.add_argument( '--start-maximized' ) # 画面最大

driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.timeouts.implicit_wait = 15 # default timeout

# プログラム板のtest スレ
driver.navigate.to "https://mevius.5ch.net/test/read.cgi/tech/1597362675/1"

element = driver.find_element( :css => ".formbody textarea" )
element.send_key "あい"

driver.find_element( :css => ".formbody input.submitbtn" ).click

734 名前:700 mailto:sage [2020/08/19(水) 09:15:13.90 ID:w/3evjlx0.net]
>>702
の続きに、以下を書くと、確認画面に切り替わった後の処理も、できる

単に、input[type=submit] のボタンを待つと、
遷移前後の両方のページで、ヒットするので、
確認画面に切り替わったかどうか、判別できない

遷移後のページだけに存在する、要素を待てば、
それが出現するまで、wait できるかも

sleep 7

# 確認画面が出る。https://mevius.5ch.net/test/bbs.cgi
puts driver.current_url # 切り替わったかどうか、URL を表示する

# ボタンのラベルを表示する
puts driver.find_element( :css => "input[type=submit]" ).attribute( "value" )

735 名前:デフォルトの名無しさん [2020/08/19(水) 10:10:18.21 ID:jdryYSd80.net]
>>701さんのリンク先参考に見よう見まねでとりあえずやってみたんですけど、いまいちcookie_jarとかよくわからない・・・

require 'mechanize'
require 'yaml'

agent = Mechanize.new
agent.user_agent_alias = "Windows Mozilla"
agent.get('https://mevius.5ch.net/test/read.cgi/tech/1578068134/l50')
cookie_str = agent.cookies.map{|e| e.set_cookie_value}.join(", ")
#puts cookie_str

agent2 = Mechanize.new
HTTP::Cookie.parse(cookie_str, "https://mevius.5ch.net/test/read.cgi/tech/1578068134/l50").each{ |cookie| agent2.cookie_jar << cookie }

cookie_yml = agent.cookies.map{ |e| e.to_yaml }.join
#puts cookie_yml

agent2.cookie_jar << YAML.load(cookie_yml)

#pp agent2.cookie_jar

agent2.user_agent_alias = "Windows Mozilla"
page = agent2.get('https://mevius.5ch.net/test/read.cgi/tech/1578068134/l50')


form = page.form_with(:action=>'//mevius.5ch.net/test/bbs.cgi')
form.field_with(:name=>'MESSAGE').value = 'テスト'
next_page = agent2.submit(form)
form2 = next_page.form_with(:action=>'../test/bbs.cgi?guid=ON')

736 名前:デフォルトの名無しさん [2020/08/19(水) 10:13:04.91 ID:jdryYSd80.net]
agent2.submit(form2)

737 名前:700 mailto:sage [2020/08/19(水) 10:21:48.83 ID:w/3evjlx0.net]
そりゃ、個別のページのクッキーを解析したり、大変だよ。
お金をもらえる訳でもないのに、他人が作ったシステムを分析するのは

それが嫌だから、漏れらは、selenium webdriver で、ブラウザにやらせる。
入力したり、ボタンを押したり、ブラウザを操作するだけだから、まだマシ

738 名前:700 mailto:sage [2020/08/19(水) 10:32:07.88 ID:w/3evjlx0.net]
>>704
>form = page.form_with(:action=>'//mevius.5ch.net/test/bbs.cgi')

>form2 = next_page.form_with(:action=>'../test/bbs.cgi?guid=ON')

これらには、https: とか、付いていないけど、動くの?

739 名前:700 mailto:sage [2020/08/19(水) 10:38:39.32 ID:w/3evjlx0.net]
簡単に言えば、serialize と同じなんだろう。
異なるアプリに、Ruby のオブジェクトを渡せない

1 などの数値も、"1" みたいな文字列になってしまうのだろう。
すべての型情報が無くなって、文字列になる。
だから、YAML.load とかを、使っているのだろう

今なら、JSON を使う事が多い

740 名前:デフォルトの名無しさん [2020/08/19(水) 14:06:31.62 ID: ]
[ここ壊れてます]



741 名前:jdryYSd80.net mailto: agent.getの時点でcookieの情報って得られてるんですね []
[ここ壊れてます]

742 名前:デフォルトの名無しさん [2020/08/19(水) 14:20:11.51 ID:jdryYSd80.net]
>>706
seleniumはブラウザ操作でmechanizeはhttp解析?みたいな感じですか?

743 名前:デフォルトの名無しさん [2020/08/19(水) 20:08:35.13 ID:JONuvCWb0.net]
>>690
よく調べたわけじゃ無いけど、
CSRF, クロスサイトリクエストフォージェリ、サイバー攻撃の一種対策されてるんじゃないかなぁ。

つまり、何某かのTokenが5chから送られていて、そいつをPOSTしないといけないとか。

5chのサイトからPOSTする時には、<input type=“hidden” value=“Token” name=“CSRF対策”>とかのタグがあって、Submitと共に自動送信される。

744 名前:700 mailto:sage [2020/08/19(水) 22:43:49.56 ID:w/3evjlx0.net]
プログラム板のtest スレと、その確認画面は、どちらも、mevius.5ch.net だから、
クロスドメインアクセスにはならない

ただ、HTML は本来、1回限りのアクセスで、前後のページには関係がない。
それを関係があるようにするために、ブラウザのクッキーを使って、セッションを結ぶ

こういうセッションがあるものは難しい。
5ch 側は仕様を知っているけど、分析する方は、仕様を知らないから、
ずっと他人のアプリを解析しなければならない

漏れは、解析するのが面倒だから、selenium webdriver を使って、ブラウザにやらす。
ただ、これはブラウザの操作でも、難しい

クッキーが無ければ確認画面が出て、有れば確認画面が出ない。
こういう条件判断をしないといけないから、難しい

Ruby on Rails でも、システムテストには、Capybara を使うけど、
これは、seleniumで、Headless Chrome を使っている

他人のアプリの解析は、HTML ヘッダーなどを分析しないといけないから、かなり難しい。
スクレイピングをやってる香具師で、こういうのを知ってる香具師は、まずいない。
HTMLヘッダーなんて、無数の項目があるから

745 名前:700 (ワッチョイ 1f2c-1yu9) mailto:sage [2020/08/19(水) 22:57:07 ID:w/3evjlx0.net]
たぶん、Mechanizeは、Nokogiri みたいなものなんだろう

その時点のHTML を取得するだけ。
ちょっとした、GET, POST などは、出来るけど

JavaScript, Ajax で動的にページを作ったものには、対応できないとか

746 名前:デフォルトの名無しさん [2020/08/20(木) 06:07:11.62 ID:5ApdpCMn0.net]
>>713
MechanizeはServerから受け取ったCookieを返すよ。

だから、POSTしたパラメータに問題があって上手くいかないのだ。

書き込み画面のHTMLからinputタグをscrapingしてhidden属性の付いてるのを探す事が先決。

見つかったらそのname, valueを取り出してPOSTパラメータへセットしてやれば良い。

747 名前:デフォルトの名無しさん [2020/08/20(木) 06:08:32.79 ID:5ApdpCMn0.net]
seleniumが簡単だが、動作が重い。
Mechanizeでがんばれ!

748 名前:デフォルトの名無しさん [2020/08/20(木) 06:38:17.41 ID:5ApdpCMn0.net]
>>688
これは違う!

外部・CP932 → Ruby内部・CP932 → 外部・CP932

が正解。
Ruby内部は、外部・CP932であればCP932だし、UTF-8なら、それに合わせて、Ruby内部・UTF-8なのだ。

749 名前:デフォルトの名無しさん [2020/08/20(木) 06:39:16.98 ID:5ApdpCMn0.net]
>>709
agent.cookies

750 名前:デフォルトの名無しさん [2020/08/20(木) 07:05:48.71 ID:5ApdpCMn0.net]
大抵のWebサイトのFormは、Formを表示したBrowserからしか、POSTできない様になっている。

その仕組みは、ServerがFormを表示するするHTMLを生成する時に、Tokenを埋め込み、そのTokenが帰って来なかったPOSTを弾くと言うものだ。

TokenはFormが表示されるごとに変更さる。(one time Token)

https://html-coding.co.jp/knowhow/security/csrf/



751 名前:700 mailto:sage [2020/08/20(木) 07:13:47.07 ID:nWR09WFB0.net]
Rails にもある、CSRF のセキュリティー・トークンとかか?

2つのページが、同じセッションと判別できるような、仕組みを探さないといけない。
他人が作った、アプリを解析するのは大変

752 名前:デフォルトの名無しさん [2020/08/20(木) 07:53:19.33 ID:5ApdpCMn0.net]
>>719
違うんだなぁ。
RubyプログラムがいきなりPOSTしても成功しない。
一旦Form画面をScrapingすれば良いのだ。

753 名前:デフォルトの名無しさん mailto:sage [2020/08/20(木) 09:46:21.48 ID:Myo84Br30.net]
>>716
それも違う。RubyはUnicode対応で作られてる
だから内部もUnicode
Windows側からUTF16で渡された場合はUnicodeで受け取るし
ANSIで渡された場合はUnicodeに変換して処理する
出力する場合はその反対

754 名前:デフォルトの名無しさん mailto:sage [2020/08/20(木) 10:42:37.67 ID:nWR09WFB0.net]
Ruby の文字列は、混在できる

ある文字列は、CP932 で、
別の文字列は、UTF-8 とか

何もしなければ、変換されない

755 名前:デフォルトの名無しさん mailto:sage [2020/08/20(木) 11:13:11.83 ID:FC2EZr4O0.net]
>>720
kan = [
"\xE6\xBC\xA2\xE5\xAD\x97".force_encoding( Encoding::UTF_8 ),
"\x8A\xBF\x8E\x9A".force_encoding( Encoding::CP932 ),
"\xB4\xC1\xBB\xFA".force_encoding( Encoding::EUC_JP ),
"\x1B\x24B4A;z\x1B(B".force_encoding( Encoding::ISO2022_JP )
]
puts kan
kan.combination(2){ |a,b| p a == b }
kan.size.times{|n| puts kan.inject(''){|r,s| r << s.encode(kan[n].encoding) } }
puts kan.map{|s| s.encoding }

756 名前:デフォルトの名無しさん (ワッチョイ 7f01-08ML) mailto:sage [2020/08/20(木) 12:03:56 ID:tyNv301J0.net]
>>716,721
君たちまずマニュアルを読もうか
https://docs.ruby-lang.org/en/2.7.0/Encoding.html

757 名前:デフォルトの名無しさん mailto:sage [2020/08/20(木) 13:07:43.70 ID:UjCnOWKd0.net]
>>719
解析が大変かどうかはものによる。
セッションIDベースのWebアプリならともかく、ログインなしの掲示板なら大したことはないやろ。

758 名前:デフォルトの名無しさん mailto:sage [2020/08/20(木) 22:50:29.80 ID:Uplnh7Gz0.net]
>>721 変換はせんだろ

759 名前:デフォルトの名無しさん (ワッチョイ 1f61-VqLe) mailto:sage [2020/08/21(金) 01:31:14 ID:SPVvFNrm0.net]
Rubyをしばらく使ってきたが、やっぱり、ブロックの最後がendであることや、
0,1が共に真であること、複数行コメントが書きにくいこと、
構造体の書き方が new Person ではなく、Person.newであること、
Directory関連でワイルドカードを使うと、関連フォルダを全て変数に読み込んでから
動作し始めること、などが使いにくいので、node.jsに乗り換えようかなと思ってる。
Rubyが良い点は、それらの機能は使ったことは無いけど、
・最初から用意されているメソッド群でmethodチェーンが書けること。
・ブロック関数が書けること。
かな。
でも、使ったことがないということは、優先順位が低いと言うことではなかろうか。

760 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 10:50:02.63 ID:w5e9p4kz0.net]
え。
そんな調子だと何を使ってもダメそう。w



761 名前:デフォルトの名無しさん mailto:sge [2020/08/21(金) 13:05:57.88 ID:SPVvFNrm0.net]
>>728
個人的には、実世界では、能力はかなり高いと評価されているけれど。

762 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 14:15:07.59 ID:tDzk/wNZ0.net]
0, 0.0, 空文字列、空配列、空辞書など、
各型に、偽がある言語は、バグる

Ruby の偽は、nil, false だけ

MISRA-C でも、( a ) みたいに、単独の数値型の変数で、真偽値を表すのは禁止されてる。
0 なら偽として使う方法

Ruby で、if ( b ) みたいに書けるのは、nil の時だけ偽だから。
0, 0.0, 空文字列、空配列、空辞書などでも真

または、b がbool 型の場合

763 名前:デフォルトの名無しさん [2020/08/21(金) 14:31:29.79 ID:2LaXNW9iF.net]
nil == false
は false

764 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 14:33:13.81 ID:w5e9p4kz0.net]
>>729
相対評価は、まわりのレベルがわからんので、なんとも。
元コメから判断すると、周辺まるごと低いのかな?と思わざるを得ない。w

まあ、たまたま自分が使ってない特定機能をアレコレ言うのはアホに見えるのはたしか。

765 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 14:35:00.79 ID:w5e9p4kz0.net]
>>730
型のないRubyでそんなことを言われても。w
そんなの、たいした違いじゃないよ?

766 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 14:49:57.72 ID:SPVvFNrm0.net]
>>732
そんなことない。
非常に上層のごく一部の人しか入れないところだと言われている。

767 名前:デフォルトの名無しさん [2020/08/21(金) 15:22:52.16 ID:2LaXNW9iF.net]
スキンのひとか

768 名前:デフォルトの名無しさん [2020/08/21(金) 15:35:51.23 ID:dYZcDjdTH.net]
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip

769 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 00:05:39.01 ID:cH1OO8njr.net]
「実世界では、能力はかなり高いと評価されている」っていう言い回しが最高に知性を感じないんですけど
いや煽りとかじゃなくマジで

770 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 00:13:16.02 ID:rn2pygew0.net]
異世界では無双している



771 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 02:33:00.24 ID:orN/hav20.net]
>>737
非常に上層のごく一部の人しか入れないんだぞ!

772 名前:デフォルトの名無しさん [2020/08/22(土) 08:20:46.05 ID:lfF/bqLu0.net]
非情に上層のごく一部の人しか入れないんだぞ!






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<307KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef