したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

スクリプト#3 @避難所

1名無しさん@避難所:2019/08/17(土) 04:06:55 ID:/RfgUwQc0
スクリプトに関する話題なら何でも

V2C使用法[スクリプト]
ttp://v2c.s50.xrea.com/manual/script.html

V2Cwikiにもスクリプト関連の情報があります
ttp://v2c.kaz-ic.net/wiki/?%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88

■前スレ
スクリプト#2 @避難所
https://jbbs.shitaraba.net/bbs/read.cgi/computer/43680/1433054157/

2名無しさん@避難所:2019/08/17(土) 05:00:04 ID:xhyR6eTU0
たておつ

3名無しさん@避難所:2019/08/22(木) 05:53:55 ID:q.1bqDCk0
Instagramのjsonの項目が変わったのかエラーになるな

4名無しさん@避難所:2019/08/22(木) 06:00:05 ID:q.1bqDCk0
Json['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'];
[0]がないエラーになるな

5名無しさん@避難所:2019/08/22(木) 10:22:58 ID:q.1bqDCk0
V2Cが取得するHTMLはchromeのHTMLと違うみたいだな
もう少し調べて見るか

6名無しさん@避難所:2019/08/22(木) 10:29:26 ID:q.1bqDCk0
Instagramはログインしないと表示されない仕様に変わったんだ
scriptのログイン偽装はどうやってやるんだ

7名無しさん@避難所:2019/08/22(木) 12:01:10 ID:q.1bqDCk0
ログインしなくて開く
https://www.instagram.com/p/B1bKPTzBa6t/
ログインしないと開かない
https://www.instagram.com/aiko_yamaide/

8名無しさん@避難所:2019/08/22(木) 12:02:24 ID:NjG26aac0
8
円広志に印税

9名無しさん@避難所:2019/08/22(木) 12:02:39 ID:NjG26aac0
誤爆った

10名無しさん@避難所:2019/08/22(木) 16:01:37 ID:q.1bqDCk0
InstagramのユーザーネームからIDに変換する方法ってあれば楽なんだけど
なければIDを登録しとかないとダメだな

11名無しさん@避難所:2019/08/22(木) 21:57:18 ID:p/2djo0o0
InstagramOnV2C 2019/08/22版
https://www.dropbox.com/s/9wn19vdn9msgidk/InstagramOnV2C_20190822.zip?dl=1

Instagramの投稿をV2Cのスレ形式で表示するjsです
Instagramにログインして使用する場合はストーリーズの取得も可能です

Instagramの仕様に依存するので規制などで将来的には、現在実装している機能が使えなくなる可能性があります

説明はzip内のreadme.txtに
絵がある説明は https://egg.5ch.net/test/read.cgi/software/1507366660/127

以下を修正
・UAをChromeの最新に修正(InstagramCommon.js)
・WEBページ形式でユーザのトップページを取得する際に以下の修正
 (getInstagramLists.js、script/system/getdat_sub/instagram.js)
  1) UAを指定するように修正
  2) クッキーを空で送るように修正新着があった場合に自動でスレを更新する機能を追加
・getdat.jsに爆サイやらしたらば用に入れた修正を反映(Instaとしての修正はありません)
・スクリプトコンソールに表示するメッセージいログを修正(InstagramTools.js)
(ReferenceTab.txt以外全部修正)
 
 

#障害の再現を起こっていたときに以下の2つのケースをネットワークのログで確認しています
#①スレ一覧を更新時html取得でhttps://www.instagram.com/xxxxxxx/へアクセスすると429のエラーとなる
#②スレ一覧を更新時html取得でhttps://www.instagram.com/xxxxxxx/へアクセスすると302のエラーとなり
 ログインページへリダイレクトされる

#本修正は②に対する修正です(V2C本体が持ってるクッキーを一緒に飛ばしてしまい、
 それでログインページへリダイレクトされてJson不正になってエラー)

#①のケースはインスタに言わせると「アカウントも作ってねーのにアクセスしすぎなんだよ(怒」
#ってことなので自分のアカウントを作るしか回避はできません

12名無しさん@避難所:2019/08/22(木) 21:58:34 ID:p/2djo0o0
書き直し

InstagramOnV2C 2019/08/22版
https://www.dropbox.com/s/9wn19vdn9msgidk/InstagramOnV2C_20190822.zip?dl=1

Instagramの投稿をV2Cのスレ形式で表示するjsです
Instagramにログインして使用する場合はストーリーズの取得も可能です

Instagramの仕様に依存するので規制などで将来的には、現在実装している機能が使えなくなる可能性があります

説明はzip内のreadme.txtに
絵がある説明は https://egg.5ch.net/test/read.cgi/software/1507366660/127

以下を修正
・UAをChromeの最新に修正(InstagramCommon.js)
・WEBページ形式でユーザのトップページを取得する際に以下の修正
 (getInstagramLists.js、script/system/getdat_sub/instagram.js)
  1) UAを指定するように修正
  2) クッキーを空で送るように修正
・getdat.jsに爆サイやらしたらば用に入れた修正を反映(Instaとしての修正はありません)
・スクリプトコンソールに表示するメッセージいログを修正(InstagramTools.js)
(ReferenceTab.txt以外全部修正)
 
 

#障害の再現を起こっていたときに以下の2つのケースをネットワークのログで確認しています
#①スレ一覧を更新時html取得でhttps://www.instagram.com/xxxxxxx/へアクセスすると429のエラーとなる
#②スレ一覧を更新時html取得でhttps://www.instagram.com/xxxxxxx/へアクセスすると302のエラーとなり
 ログインページへリダイレクトされる

#本修正は②に対する修正です(V2C本体が持ってるクッキーを一緒に飛ばしてしまい、
 それでログインページへリダイレクトされてJson不正になってエラー)

#①のケースはインスタに言わせると「アカウントも作ってねーのにアクセスしすぎなんだよ(怒」
#ってことなので自分のアカウントを作るしか回避はできません

13名無しさん@避難所:2019/08/23(金) 06:41:45 ID:zbJ7VhSE0
>>11
インスタがまだ不調
なんか直しててミスってる状態?
ウェブブラウザですら
ログインしてないでユーザのトップページを開こうとするとログイン画面にリダイレクト
ログインしてユーザのトップページを開こうとするとエラー

14名無しさん@避難所:2019/08/23(金) 10:19:12 ID:RhsGXJY.0
cookieとかぜんぜんわからんから修正できない
user idを手動で探して登録しておいて
Query_Hash = '472f257a40c653c64c666ce877d59d2b'で一覧jsonを取得
https://www.instagram.com/p/xxxxxxxxxx/を読み込んで
フルネーム取得のやりかたにかえようかな

15名無しさん@避難所:2019/08/23(金) 12:37:49 ID:RhsGXJY.0
https://www.instagram.com/p/xxxxxxxxxx/
これは連続5回しか読めないのか

16名無しさん@避難所:2019/08/23(金) 13:20:52 ID:RhsGXJY.0
>>15
勘違いスクリプトのバグだった
なんとか出来た

17名無しさん@避難所:2019/08/23(金) 15:08:10 ID:RhsGXJY.0
Query_Hash = '472f257a40c653c64c666ce877d59d2b'で一覧jsonを取得してると
たまに429のエラーを吐き続けるがまた正常に戻る

18名無しさん@避難所:2019/08/23(金) 22:36:07 ID:zbJ7VhSE0
規制を掛けてるのか
バージョンアップに失敗してるだけなのか

さっぱり判断がつかん・・・
>インスタ

19名無しさん@避難所:2019/08/23(金) 23:11:21 ID:RhsGXJY.0
2秒スリープさせると429エラーが減るかも
なんとなく調子がいい
回数の問題だったら意味ないけど

20名無しさん@避難所:2019/08/24(土) 07:24:44 ID:a5vnex5w0
1秒スリープだと429エラーになるが
2秒スリープにすると429エラーにならないみたい

21名無しさん@避難所:2019/08/26(月) 17:15:26 ID:w5xgRg2w0
v2c.createHttpRequestのresponseCodeはバグってる
getContentsAsString()を実行すると正常な値を返すが
何もしないと-1を返す

22名無しさん@避難所:2019/08/26(月) 20:08:31 ID:TaBlUg3Y0
createHttpRequestは通信開始の宣言をするだけで
実際の通信はgetContentsAsStringやgetContentsAsBytesでやってるので
getContentsAsXXXXX実行しないと-1が返ってくるのは仕様

23名無しさん@避難所:2019/08/26(月) 20:24:17 ID:w5xgRg2w0
紛らわしいな

24名無しさん@避難所:2019/08/26(月) 21:07:36 ID:TaBlUg3Y0
そうしとかないとsetpropertyでUAとかCookieを弄れなくなるの

var hr = v2c.createHttpRequest()

でhrmlまで取得しちゃうとUAとかCookie偽装のの介入ができないでそ?
(UA偽装しないとUAはV2C/xxxxxで飛んじゃうし)

だから

var hr = v2c.createHttpRequest();
hr.setRequestProperty(key, val);
var html = hr.getContentsAsString()
if(hr..responseCode == 200){
}

となるわけ
v2c.readURL()と違って直感的じゃないんだけどね

25名無しさん@避難所:2019/08/27(火) 09:11:44 ID:MtEOvmWU0
ID非表示のレスを抽出するスクリプトないでしょうか?

26名無しさん@避難所:2019/08/27(火) 13:04:50 ID:ORbIOgLs0
analysis_slipがV2C+でしか使えないのが辛い

27名無しさん@避難所:2019/08/27(火) 17:40:33 ID:8mYL0da20
//書き込み欄の.jpg:origを?format=jpgに変換
// ${SCRIPT:} ReplaceTwitterjpg.js

var vcx = v2c.context;
var th = vcx.thread;
var wp = th.openWritePanel();

var text = wp.message.text + '';
wp.message.text = text.replace(/.jpg:orig/g, '?format=jpg');

28名無しさん@避難所:2019/08/29(木) 17:48:02 ID:fcqMAabg0
java8にしても最新のRhinoをダウンロードすれば使えるらしいが
V2Cでも問題なくRhino用スクリプトが動くのかな?

29名無しさん@避難所:2019/08/29(木) 17:49:01 ID:fcqMAabg0
java7だとjavascriptでclassが使えないから不便

30名無しさん@避難所:2019/08/29(木) 17:52:54 ID:fcqMAabg0
class使えないのか入れるのやめた

31名無しさん@避難所:2019/08/30(金) 11:52:43 ID:Eo9B2w9E0
>>25
透明非表示にしないでラベルをつけて
そのラベル使って検索欄で検索とか?

>>26
レス表示欄から起動するjsに一応改造はできたんだけどパクっていいのなんだろうか?

32名無しさん@避難所:2019/08/30(金) 12:13:46 ID:CIOEqCW20
>>31
V2C+の人に承諾取るべきだけど連絡できなければ無断使用になるのかな
個人的にはその改造スクリプト欲しいです

33名無しさん@避難所:2019/08/30(金) 21:31:32 ID:Eo9B2w9E0
>>31
パクることにします

で、とりま簡単に
https://1.bitsend.jp/download/d5d51a63bda0212208bb1682116e91b1.html
パス:hyqeRazu
使ったことないロダですが今日から14日間有効

オリジナルjs→http://jbbs.shitaraba.net/bbs/read.cgi/computer/43680/1456676632/438

外部コマンド>一般>レス表示に登録
非V2C+用定義 CoCoから-CoCoまでが今回追加個所

出力結果に関してはテキストポップアップで表示
https://i.imgur.com/r1ftgKN.png
https://i.imgur.com/KtyeRNK.png

IP情報はオリジナルをそのまま流用
UA情報は新規追加(Hash2UAを使用)とオリジナルのどちらかを選択(デフォはHash2UAを使用)
UA情報のオリジナルは正規表現を修正

3426:2019/08/31(土) 10:01:35 ID:sK1nEW4E0
>>33
ありがとうございます。動作確認し正常に反映されました

35名無しさん@避難所:2019/09/01(日) 21:24:10 ID:foZQGgok0
subject.jsのワッチョイの一部機能が変になりました
「// ss = lastmodify_loader(ss,bd,cx);」の//を削除し上書きした後
スレ一覧のカラムにあるワッチョイを表示に移動させ、V2CMOD-Z設定の一般3の
subject_lastmodifyと連携するにチェックを入れsubject.jsを再読み込み後
スレ一覧を更新するとワk!などが出ますがNo.が全部現状とは異なる数字に変わります
subject.jsのどの箇所をどう書き換えればスレタイの順位番が元通りに戻るのでしょうか

36名無しさん@避難所:2019/09/02(月) 10:20:58 ID:Lq4fRX7c0
>>35
subject.txtとlastmodify.txtのデフォの並び順が異なるせいです
lastmodify_loaderを有効にした場合はsubjectの内容を捨ててるんで
並び順がlastmodify準拠になります

で、お試しで修正してみました
https://www.dropbox.com/s/0b42exmft2su986/subject_201909020002.zip?dl=1
(自分が使ってるsubject.jsをそのまま上げてます)
933行目からがlastmodify_loaderの機能になります

sort_by_subjectTxtを1にするとlastmodify.txtから取得したスレ一覧の並び順を
subject.txt準拠に並べ直します(並べ直し処理の分遅くなります)
但し並べ直しの対象はsubject.txtとlastmodify.txtのどちらにもあるスレで
どちらかにしか存在しないスレは並べ替え後のスレ一覧から漏れます

37名無しさん@避難所:2019/09/02(月) 10:22:27 ID:Lq4fRX7c0
933行目から最後までがlastmodify_loaderの機能になります

38名無しさん@避難所:2019/09/02(月) 17:00:00 ID:JRffVouE0
https://www.instagram.com/graphql/query/?query_hash=08574cc2c79c937fbb6da1c0972c7b39&variables={"cached_feed_item_ids":[],"fetch_media_item_count":12,"fetch_media_item_cursor":"''"}
これはhttps://www.instagram.com/で表示される元のAPIみたいなんだけど
これをV2Cのスクリプトで読むとcookieのds_user_idを認識しないみたで読むことが出来ない
どうすれ読めるようになるんだろう?

39名無しさん@避難所:2019/09/02(月) 20:23:29 ID:Lq4fRX7c0
レスポンスの中に複数の「set-cookie」がある場合
一つの「set-cookie」しか取り込めなかった記憶があるから
それでds_user_idが入ってる「set-cookie」が捨てられたとか?

40名無しさん@避難所:2019/09/02(月) 22:41:35 ID:hHjqee/o0
>>36
subject.jsを置き換え更新しましたがソフトウェア板と自作PC板では問題ありませんでした
常駐板は20、閲覧するスレは60程度と比較的少ないせいか新着書き込み
受信完了するまで1分強程度ですし概ね満足しています
迅速な対応ありがとうございました

41名無しさん@避難所:2019/09/03(火) 13:01:53 ID:wB57hml20
https://www.instagram.comにアクセスするときは
Request HeadersにCookie設定しないで
Form Dataでユーザー情報を渡してるみたいだけど
V2Cだとどうやってアクセスすればいいんだ?

42名無しさん@避難所:2019/09/03(火) 14:38:22 ID:RryWoQG60
HttpRequestオブジェクト
createHttpRequest(java.net.URL u,String d)
URLuに対してデータdをPOSTするHttpRequestオブジェクトを作成する。(dはそのまま送信されるので適切にencodeされている必要がある。)

のdでjsonを飛ばすしかないんじゃないの?

43名無しさん@避難所:2019/09/03(火) 15:48:59 ID:wB57hml20
https://www.instagram.com/?Form Data=access_token=…
をURLエンコードでつなげればいいみたい

44名無しさん@避難所:2019/09/03(火) 16:32:39 ID:wB57hml20
やっと出来た
原因がわかったCookieを読み込む処理を読んでないバグだった
Cookieが空白なら失敗するに決まってる
いろいろ勉強になったからいいか

45名無しさん@避難所:2019/09/05(木) 12:38:40 ID:d0ZYGpxw0
>>38
これは投稿時間でソートしてないので
タイムスタンプを終了判定に使えない
DATファイルに存在してるかで判断するしかないので処理に時間がかかるが
これで規制を回避して更新チェックができるようになった

46名無しさん@避難所:2019/09/07(土) 11:11:43 ID:KejHdGyo0
[0][node][taken_at_timestamp]
[1][node][taken_at_timestamp]

このjson配列をtaken_at_timestampでソートする場合
下の関数に添字とか入れても動きそうにないから
[node]の下の子ノードで配列作り直してソートするしかないのかな

//. 比較関数
function compare( a, b ){
var r = 0;
if( a.age < b.age ){ r = -1; }
else if( a.age > b.age ){ r = 1; }

return r;
}
myArray.sort( compare );

47名無しさん@避難所:2019/09/07(土) 12:45:41 ID:KejHdGyo0
これを使えばいいのか
mapがなんなのかもわからん

Sorting maps
一時的な配列に実際にソートに使用する値を抜き出して、その一時的な配列をソートし、 一時的な配列から元の配列を正しい順序で取得します。

// ソート対象の配列
var list = ["Delta", "alpha", "CHARLIE", "bravo"];
// 一時的な変数mapへ位置とソート順の値を保持します
var map = list.map(function(e, i){
return {index: i, value: e.toLowerCase()}
})
// 減算値を使用してmapをソートします
map.sort(function(a, b) {
return a.value > b.value ? 1 : -1;
});
// 結果の順序を反映して取得します
var result = map.map(function(e){
return list[e.index]
})

48名無しさん@避難所:2019/09/07(土) 12:59:35 ID:D2G.Ujc20
[node]の下に[taken_at_timestamp]が一つしかない、かつ他のnodeのtaken_at_timestampと内容が重複しないなら

var 連想配列 = {}
連想配列[[0][node][taken_at_timestamp]] = [0]
連想配列[[1][node][taken_at_timestamp]] = [1]

でtaken_at_timestampをキーにした連想配列にして
それをソートすりゃいいんじゃね?

https://www.sejuku.net/blog/27965

49名無しさん@避難所:2019/09/07(土) 14:23:30 ID:KejHdGyo0
java rhinoのjavascriptにはDOMがないから検索の面倒な処理をしてたのか
javaならDOM操作が出来るからjavaを使えばいいのか

50名無しさん@避難所:2019/09/07(土) 15:51:15 ID:KejHdGyo0
java8にrhino-1.7.11.jarを入れてみたが
エラーになったり変な動作したりして使えなかった

51名無しさん@避難所:2019/09/07(土) 15:55:58 ID:smCQbhXI0
そもそもあれは7に入れるようのものだから競合して当然だよ

52名無しさん@避難所:2019/09/07(土) 16:03:19 ID:4T9WhHBo0
ソートされたnodeが欲しいなら>>46でいいじゃない何を無駄に難しくしてるんだ

53名無しさん@避難所:2019/09/07(土) 20:28:52 ID:D2G.Ujc20
V2C-R 2.11.8とその派生はRhinoと相性が悪い

54名無しさん@避難所:2019/09/08(日) 11:19:15 ID:xWlPuNsQ0
上手くいきそうだけどHTMLが完璧じゃないとエラーになる

var factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
var documentBuilder = factory.newDocumentBuilder();
var document = documentBuilder.parse(Url);←67行目

var root = document.getDocumentElement();

//ルート要素のノード名を取得する
v2c.alert("ノード名:" +root.getNodeName());

67行目org.xml.sax.SAXParseException: The element type "img" must be terminated by the matching end-tag "</img>".

javaソースだとこれが指定されてるけどなんか関係あるのかな
public void domRead(String file) throws SAXException, IOException, ParserConfigurationException

55名無しさん@避難所:2019/09/08(日) 12:48:49 ID:xWlPuNsQ0
https://jsoup.org/download
これでhtml読めそうだからやってみるか

56名無しさん@避難所:2019/09/08(日) 15:20:56 ID:xWlPuNsQ0
>>55
これ使ったら成功したみたいだが
ドキュメントがわかりにくいのとサンプルプログラムがないから
子ノードを配列にしてfor文で回すのがわからん
javaのlib/extフォルダにjarを入れとけば設定なしで使えたので助かった

var document = org.jsoup.Jsoup.connect("http://www.babymetal.com/jp/&quot;).get();
v2c.alert(document.title());

57名無しさん@避難所:2019/09/08(日) 17:23:50 ID:xWlPuNsQ0
var document = org.jsoup.Jsoup.connect("http://www.babymetal.com/jp/&quot;).get();
var elements = document.getElementById("news_list");
var newurl = elements.getElementsByTag("li");
v2c.alert(newurl.html());

<a href="http://www.toysfactory.co.jp/artist/babymetal/metalgalaxy20191011 " target="_blank">
urlを抜き出したいが上手くいかない
もう少しでどうにかなりそう

58名無しさん@避難所:2019/09/08(日) 18:18:36 ID:xWlPuNsQ0
javaだとこのfor文使えるが
for (Element element : allElements)
javascriptのfor( of )はオブジェクトに使えないから次が読めない
困った
javaのfor文を使える裏技ないのかな

59名無しさん@避難所:2019/09/08(日) 18:48:54 ID:xWlPuNsQ0
>>58
html化にして\nで区切って配列にして
for文で一行ずつ再オブジェクト化したら
URLを抜き出せた
var array = newurl.html().split('\n')
for(var i = 0; i < array.length; i++) {
var doc = org.jsoup.Jsoup.parse(array[i]);
var doc2 = doc.getElementsByTag("a");
var attr2 = doc2.attr("href");
}

間抜けだけどしょうがない
matchで抜き出すよりはこっちの方がスマートだな

60名無しさん@避難所:2019/09/08(日) 18:53:06 ID:epth1PWU0
newurlはliが複数あるから配列で帰ってくると思ったんで

for(var i=0; i<newurl.length; i++){
 var elm = newurl[i];
var a = elm.getElementByTag('A');
}
とかで抜いてキャいいんじゃね?

#2年くらい作ってないんで全部記憶

61名無しさん@避難所:2019/09/08(日) 18:57:00 ID:xWlPuNsQ0
>>60
newurl.lengthはundefinedでダメだった

62名無しさん@避難所:2019/09/08(日) 19:20:14 ID:epth1PWU0
そっかJavaScriptじゃなくてjsoupだもんね

63名無しさん@避難所:2019/09/08(日) 19:38:16 ID:epth1PWU0
lengthじゃなくてsize()だとどう?

64名無しさん@避難所:2019/09/08(日) 21:38:56 ID:epth1PWU0
https://jsoup.org/apidocs/org/jsoup/nodes/Element.html
を見るとgetElementsByXXXXXXが返す結果の型はElementsクラス


https://jsoup.org/apidocs/org/jsoup/select/Elements.html
を見るとElementsクラスのの上位クラスはArrayListクラスなんで

http://mdiz1103.xsrv.jp/wordpress/w_1_programming/?p=12
https://i.imgur.com/wOv29iW.png
のArrayListの方ぽい

65名無しさん@避難所:2019/09/09(月) 06:07:29 ID:GRxunFzs0
>>64
ありがとう
これで出来た
var document = org.jsoup.Jsoup.connect("http://www.babymetal.com/jp/&quot;).get();
var element = document.getElementById("news_list");
var elements = element.getElementsByTag("a");
for(var i = 0; i < elements.size(); i++){
var attr = elements.get(i).attr("href");
v2c.alert(attr);
}

66名無しさん@避難所:2019/09/09(月) 07:16:39 ID:GRxunFzs0
URLは.absUrl("href")を使えば../xxx系を
http://www.babymetal.com/jp/news/?id=110
に変換してくれるみたい

var document = org.jsoup.Jsoup.connect("http://www.babymetal.com/jp/&quot;).get();
var element = document.getElementById("news_list");
var elements = element.getElementsByTag("a");

for(var i = 0; i < elements.size(); i++){
var attr = elements.get(i).absUrl("href");
v2c.alert(attr);
}

67名無しさん@避難所:2019/09/10(火) 09:29:01 ID:YnDKZ6oI0
jsoupの欠点
org.jsoup.Jsoup.connecを使うとこれがあると処理が止まる
<meta http-equiv="Refresh" content="0;URL=https://l-tike.com/concert/mevent/?mid=389230&quot;&gt;
htmlをv2cで取得してorg.jsoup.Jsoup.parse(html);した方が安全だった

68名無しさん@避難所:2019/09/11(水) 19:13:14 ID:cUdt5LCA0
jsoupを使うとこういうことが出来るらしい
常識なんだろうけど便利でビックリした
変数Elementsを変更するとセレクト元の変数Docの内容が変更されてた
最後にテキスト化すればHTMLtoTEXTが簡単に出来そう

var Doc = ArticleDoc.select(".news_txt").last();
//画像テキスト化
var Elements = Doc.select('img[src]');
for(var i = 0; i < Elements.size(); i++){
var AbsUrl = Elements.get(i).absUrl('src');
Elements.get(i).text(AbsUrl);
}

69名無しさん@避難所:2019/09/12(木) 15:58:32 ID:xRBdcWSM0
jsoupのHTMLtoTEXTスクリプト出来たが
一部文字化けするから使いものにならなかった

変換しない文字
&ndash;

◼︎

70名無しさん@避難所:2019/09/12(木) 18:53:46 ID:sFPzbDMk0
>>69
多分これっしょ
https://qiita.com/motoki1990/items/fd7473f4d1e28c6a3ed6

71名無しさん@避難所:2019/09/12(木) 19:29:43 ID:jpyok6Cs0
チルダは本当によくある
あと文字コードは基本的なようでいて実は慣れてても時々躓く面倒な問題

72名無しさん@避難所:2019/09/12(木) 20:05:12 ID:sFPzbDMk0
いつ化けたかやね
jsoupに取り込んでDOMにした時点か
HTMLtoTEXTした時点か
outputに出力/表示した時点か

73名無しさん@避難所:2019/09/12(木) 20:25:55 ID:xRBdcWSM0
jsoupオブジェクトをhtml()で出力すると化けないが
text()で出力すると化けるみたい

74名無しさん@避難所:2019/09/12(木) 21:05:51 ID:sFPzbDMk0
試しに
https://www.dropbox.com/s/den49d6u6389da5/getdat.js_20190508232210_.zip?dl=1
の2308行目をコピペしてtext()した結果を置換してみて
jsはUTF-8
https://i.imgur.com/w1Drgs0.png
これで文字化けをコントロール出来れば文字化けを回避できるはず

したらばの過去ログをgetdatjsでスレを表示する場合に文字化けを回避するために使用してる置換です

75名無しさん@避難所:2019/09/12(木) 21:19:37 ID:sFPzbDMk0
jsの文字コードはUTF-8だよね?

76名無しさん@避難所:2019/09/13(金) 08:04:04 ID:b6cSdxb60
HTMLがUTF-8でDATがShift_JISだから漢字はこれでも化けるのか
text()は&#xxx;文字を削除してるみたいなので
&#を全角にして最後に&#に戻したら漢字は上手くいったが
&ndash;が化ける

77名無しさん@避難所:2019/09/13(金) 11:45:17 ID:My4Y/o2c0
Javaはよく知らんがcharsetの変換とかないの
ないならtextをバイト列経由でshiftjisにするとか

78名無しさん@避難所:2019/09/13(金) 11:48:02 ID:b6cSdxb60
HTMLは↓これで記述してるのに
&Eacute;
&eacute;
jsoupの中では&Eacute;と&eacute;の文字に変換されてた
エスケープをそのままにさせる設定があればどうにかなるのに

79名無しさん@避難所:2019/09/13(金) 12:32:45 ID:b6cSdxb60
v2c.writeLinesToFile(Thread.localFile, DatData, 'Shift_JIS');
これやると消えるみたいだから
変換不能文字→参照(G)を読み出して変えてやればいいのかも

80名無しさん@避難所:2019/09/13(金) 14:20:31 ID:b6cSdxb60
Shift_JISにする前にこのコードにしたら文字化けがなくなった
& #65288;& #29694;& #22320;& #26178;& #38291;& #65289;
(現地時間)

81名無しさん@避難所:2019/09/13(金) 15:06:07 ID:00XLl0kM0
なんか自分も通った記憶のある道でワロタ
全ての文字を数値文字参照(文字参照)に変換すると
文字化けは補償されるんだけどログが全部&#xxxxxになって何が何だか分からなくなる
というオチ

82名無しさん@避難所:2019/09/13(金) 15:16:46 ID:b6cSdxb60
昔janeとの互換性のためにShift_JISに変更したんだよな

83名無しさん@避難所:2019/09/13(金) 15:32:49 ID:00XLl0kM0
【test】書き込みテスト_02
https://egg.5ch.net/test/read.cgi/software/1560389875/848
https://i.imgur.com/cOof1Xk.png
 
↑のWEBページソース
https://i.imgur.com/cc0VzGE.png
 
dat(SJIS)の中身
https://i.imgur.com/FOrYDjg.png

5ちゃんはSJIS、ベビメタのサイトはUTF-8だけど
Javaに取り込めばメモリ上は両方ともUTF-16?になるからWEBページの文字コードの違いは吸収される

で出力対象がなんなのかわからんけど例えば出力対象がSJISのdatでも可読文字を数値文字参照(文字参照)で保存しとけば
Javaのレンダラはdat中の数値文字参照(文字参照)を可読可能な文字に置き変えて表示してくれる

なんで文字化けする文字だけ数値文字参照(文字参照)に置き変えればいいのではと

あとサロゲートペアの考慮もいるのかな?
その辺やってるのが昨日上げたgetdat.jsのしたらば対応の処理

84名無しさん@避難所:2019/09/13(金) 15:40:24 ID:00XLl0kM0
UNICODE周りのコード変換なら
https://www.marbacka.net/msearch/tool.php
が便利

85名無しさん@避難所:2019/09/13(金) 17:04:29 ID:b6cSdxb60
v2cが使ってるエスケープ配列見つかったから
エスケープ系と>>74だけ数値化すればいいのか

86名無しさん@避難所:2019/09/14(土) 08:00:52 ID:DhOH1CbI0
◼こういう文字はどうやって判断するんだ
文字をShift_JISにエンコードしてUTF-8でデコードして
文字と違っていたら数値文字参照にすればいいのかな
上位bitがなんちゃらとかさぱりわからん

87名無しさん@避難所:2019/09/14(土) 12:52:26 ID:DhOH1CbI0
String str = "あ";
byte[] bytes = str.getBytes("SJIS");
String newStr = new String(bytes, "SJIS")
strとnewStrが違ったら数値文字参照にするで上手くいかないのかな




掲示板管理者へ連絡 無料レンタル掲示板