したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

スクリプト#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/

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が違ったら数値文字参照にするで上手くいかないのかな

88 名無しさん@避難所 :2019/09/14(土) 13:14:31 ID:rfao2vlI0
どういうアウトプットにしたいのか分からんから何も言えん
普通の絵文字だからフォントさえ入ってれば参照形式でも表示されると思うんだが

89 名無しさん@避難所 :2019/09/14(土) 14:12:04 ID:DhOH1CbI0
これで上手くいった
俺天才かも

//【数値文字参照変換】
function EncodeChar(Text) {
var EncodeText = '';
var TextArray = Text.split('');
var BiteArray = [];
var JString = '';
var NewString = '';

for(var i = 0; i < TextArray.length; i++) {
JString = new java.lang.String(TextArray[i]);
BiteArray = JString.getBytes('SJIS');
NewString = new java.lang.String(BiteArray, "SJIS");
if(JString == NewString) {
EncodeText += TextArray[i];
} else {
EncodeText += '&#' + Text.charCodeAt(i) + ';';
}
}
return EncodeText;
}

90 名無しさん@避難所 :2019/09/14(土) 16:11:41 ID:DhOH1CbI0
BiteArray スペルが違ってたbyteだった

91 名無しさん@避難所 :2019/09/15(日) 08:29:00 ID:fmxhQmME0
jsoupの使い方
最初にどちらかでオブジェクト化して
Doc = org.jsoup.Jsoup.parse(Html);
Doc = org.jsoup.Jsoup.connect(NewsUrl).get();

これでテキスト化出来る

//【テキスト変換】
function HtmlToText(NewsDocument) {
var Message = ''; //メッセージ欄
var Doc = '';
var Elements = '';
var AbsUr = '';
var Text = '';

Doc = NewsDocument.select(".news_txt").last(); //class選択

//画像URLテキスト化
Elements = Doc.select('img[src]');
for(var i = 0; i < Elements.size(); i++){
AbsUrl = Elements.get(i).attr("src") + '';
if(AbsUrl.match('../..')) {
AbsUrl = AbsUrl.replace('../..', 'http://www.babymetal.com');
Elements.get(i).text(AbsUrl + '.jpg');
} else {
Elements.get(i).text(AbsUrl);
}
}

//YoutubeURLテキスト化
Elements = Doc.select('iframe[src]');
for(var i = 0; i < Elements.size(); i++){
AbsUrl = Elements.get(i).absUrl('src') + '';
if(AbsUrl.match(/http:\/\/www\.youtube\.com\/embed\/(.+?)\?/i)) {
Elements.get(i).text('https://www.youtube.com/watch?v=' + RegExp.$1);
}
}

//リンクURLテキスト化
//Elements = Doc.select('a[href]');
//for(var i = 0; i < Elements.size(); i++){
// Text = Elements.get(i).text() + '';
// if(Text.match(/https?:\/\//i) == null) {
// AbsUrl = Elements.get(i).absUrl('href');
// Elements.get(i).text(Text + ' ' + AbsUrl);
// }
//}

//<p>改行
Doc.select('p').prepend("%br2n%%br2n%"); //ダミー改行変換
//<br>置換
Doc.select('br').append("%br2n%"); //ダミー改行変換

Message = Doc.text() + ''; //テキスト化
Message = EncodeChar(Message); //【数値文字参照変換】
Message = Message.replace(/%br2n%/g,'<br>') + ''; //ダミー改行置換

return Message;
}

92 名無しさん@避難所 :2019/09/17(火) 11:59:13 ID:hiDEKj.k0
PopupTools_20190917.zip
https://www.dropbox.com/s/0sdhxtjc8t5crc1/PopupTools_20190917.zip?dl=1
 
popupTwitterInfo.js
PopupStatusYoutubeV3.js
PopupStatusInstagram.js
PopupStatusDailymotion.js
の詰め合わせです
 
Java7,8,9用とJava6用にわけてあります
Java6では同梱のjson2.jsも必要となります
 
修正箇所
・Instagramのポップアップで画像のサムネが表示されなくなったのを修正


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

緊急避難セット KH-50G / ミヤ化学



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