NEUTRINO入門

目標はきりたんにポルカドットスティングレイのパンドラボックスを歌わせることです

 

やる事

musescoreでタブ譜や楽譜、midiを解析 

歌詞を入力

music.xmlに変換

neutrinoに突っ込んでエラー発生せずに生成できるまで

 

やっていき

簡単なmidiに歌詞を付与 きりたんに歌わせるまで頑張る

歌詞が著作件?簡単にコピペできなくて

clipBoardにコピーされた画像からGoogle Vision APiOCRして res or format "text or json"を返すものを関数化しました powershell

クリップボードの画像をdesktopに保存する → BASE64でencodeする → ocr apiを叩く · GitHub

 

明日はこれやっていきたいです

chord-in-code.hatenablog.com

 

 

Google Docあらゆるものにtutorialどんどん増えてうれしい...

あとgpt coplilot生まれてくれてありがとう

D-POS 全取得DL JANコード プルダウン選択をjsで

D-POSが新しくなったらしくRPAの更新作業をしました。

その際、少し面倒な事をしたので共有です。

 

やりたい事

D-POSデータの全取得DLの自動化

 

面倒な事

全POSデータ取得設定の[JANコード]選択時に5000以上はプルダウンの全選択ができない

30000件以上はDLできない

以前はJANコード分割されてたみたいですね

なにか理由があるのでしょう

 

D-POSの機能で使用できる全件取得は5000件までなのでjsで全取得します。

 

やる事

プルダウンはjsで順次追加されるので開発者用のコンソールで高速スクロールします。

レンダリングされた状態の要素をclick() していきます。checked = trueにしても※1fetchされません。 

設定を保存します。

 

やっていきます。

まずスクロールしてレンダリングさせます。

const tile = document.querySelector(".tileContainer")
const tileScroll = (tile) => {
    tile.scrollTop += 1000;
    console.log("+1000px")
};
const intervalId = setInterval(tileScroll , 100, tile.parentElement)

 

値は適当に調整してください。

自分は90000件くらいで2000回くらい回ってました。

回り切ったら止めます

  clearInterval(intervalId)

全選択します

[...document.querySelector(".tileContainer").children].forEach((ul, index, array) => {
        [...ul.children].forEach((li, index) => {
            li.children[1].children[0].click();
        });   
});

90000件くらい選択されましたが件数の上限は30000件周辺なのでDL出来ません。ので分割します。

上限値を確認します。

docに書いてありました

30000件でした。

listの要素数が460個だったので4分割してDLしようと思います。

document.querySelector(".tileContainer").children.length
461

115まで選択した所、23200でした。他も多少件数に差はあるものの30000件は超えなさそうです。

[...document.querySelector(".tileContainer").children].forEach((ul, index, array) => {
    if (index <= 115) {
        [...ul.children].forEach((li, index) => {
            li.children[1].children[0].click();
        });   
    }
});

後はレンダリングされているか確認しつつ115, 230, 345, 460で条件を変更し実行して完了です。

 

[...document.querySelector(".tileContainer").children].forEach((ul, index) => {
    if (index > 115 && index <= 230) {
        [...ul.children].forEach((li, index) => {
            li.children[1].children[0].click();
        });   
    }
});

 

※1 内部にtableauがiframeで埋め込まれていて通信はどのように行われているのか気になり(DOS攻撃になってないか)ネットワークを確認した所、以下のようにリクエスト先に送信を行っていました。

 

短時間に複数クリックされた場合、リクエストをまとめる。

categorical-filter-by-indexとしてまとめてリクエスト処理されているのが確認できます。

ブラウザ開発者ツールのネットワークタブ

ペイロードのフォームデータ 

大丈夫そうですね。ペイロードのfilterAddIndicesやRemoveIndicesからリストとして渡されて一回のリクエストが送信されている事が確認できました。

 

また%5Bsqlploxy~で始まる https://tableau.kaiba-datacompass.com/vizql/w/_ver1_0_0_hogehoge/v/sheet0/getfilteritems/sessions/hogehogehoge/sheets/分析対象_商品(JAN)_カテゴリー/filters/%5Bsqlproxy.hogehogehogehoge.%5Bnone%3Aitem_code_name%3Ank%5D?fromIndex=800&toIndex=999&domain=cascading 

リクエストはドロップダウンリストの呼び出しです。

 

カスケードレプリケーションとかいうものも使用しているみたいですね

dev.classmethod.jp

www.postgresql.org

 

うーむ、わからない..

 

 

automation anywhere に入門しました。 HTML Parserを使用してパースする。

最近RPAを初めて触ったのですがその際に詰まった事があり、参考記事が少なかったので共有します。

依頼された要件は毎日手動更新しているものがあるので、スクレイピングをして自動化してほしいという内容です。(対象は自社サイト)

automation anywhereを使用して作成する事も要件にあり、これのみで作成しています。

csv読み込み → URLにリクエスト → 特定の値を取得する → csv更新



まず作成したものの全容です。

csvのURLからサイトの特定のtextを取得してcsvに格納、更新するというものです。

csv,ループなど..プログラムの構文と同じ感じで使用できます。

REST アクションではheader、プロキシなど設定ができます。

モバイルからのアクセスが必要、URLリストが同一オリジンだった為

User-Agentとkeep-aliveを付与して送信します。

プロキシ、認証は未設定、timeoutはデフォルトのままです

レスポンスは辞書型で返してくれます。

resDictのBodyを※1HTML Parserの CSSセレクタ検索でパースします。

 

成功するとlistにdictを格納して返してくれます。

この表示確認出来そうなdictを見るとエラー発生で落ちます。なんでや。※2

なのでこの中の値を確認する為にループを使用する必要があります。

dict_elementにはサブタイプ文字列を指定しています。

参照できました。

後はリストからも参照は可能なので $parse_html[0]{text}$ でも値を取り出せます。

 

stringは通す、任意も通す、dictは通さない

任意のアスタリスクがanyに見えてしまうよ..

 

※1

HTML Parser

https://s3-us-west-2.amazonaws.com/botstore-media/wp-content/uploads/2020/08/02095120/a2019-html-parser.pdf

英語なのでここに突っ込んでください

translate.google.co.jp

 

※2

多次元があるので再帰とか使用しないと大変だからなのかな???

 

parserの実装内容

github.com

 

ちなみにPythonで実行した場合

import csv
import requests
from bs4 import BeautifulSoup

def getHoge(url):
    # 適当なURL
    user_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X)
AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1"
    header = {
        "User-Agent": user_agent
    }

    # Webページを取得
    try:
        r = requests.get(url,headers=header)
        r.raise_for_status()
        soup = BeautifulSoup(r.content, "html.parser")
    except requests.exceptions.RequestException as e:
        return "WEBサイト" + url + "に接続できませんでした。"

    # class名がfooter_tickerのタグを取得
    eles = soup.select('div.footer_hoge > p > span')
    if eles != :
        # パーサーにデータを入力
        return eles[0].string
    else:
        return url + " 人数を解析取得できませんでした"


with open("huga.csv", "r" , newline="", encoding="utf-8") as input_csvfile:
    csvreader = csv.DictReader(input_csvfile, ['メーカー','商品名','URL','購入人数'])
   
    buyout_people_list =
    j = 0
    next(csvreader)
    # 更新用人数リストを取得
    for row in csvreader:
        num = getMoaconBenthMark(row["URL"])
        buyout_people_list.append({'購入人数': num})
        print(buyout_people_list[j])
        j = j + 1
   
    # csvに書き込み
    with open("huga人数追加.csv", "w", newline="", encoding="utf-8") as output_csvfile:
        csvwriter = csv.DictWriter(output_csvfile, ['メーカー','商品名','URL','購入人数'])
        csvwriter.writeheader()
        input_csvfile.seek(0)
        next(csvreader)
        i = 0
        for row in csvreader:
            row.update(buyout_people_list[i])
            print(row)
            csvwriter.writerow(row)
            i = i + 1
 

 

Pythonをautomation anywhereで実行する事を試したのですがtutorialやHello worldも実行できず、記事も見当たらなかったので

良かったらPythonの実行方法を知っている方がいれば教えてください