2021年7月23日金曜日

Power Automate Desktop(Webページからデータを抽出する)で改行が?!


 郵便番号の検索自動を作ってみた


デバッグの為に、毎回ブラウザを起動するのは疲れる

起動モードを、「実行中のインスタンスに接続する」に変更しました。

(何でアクションは、新しい???を起動するなんだ、???を起動するでいいじゃないですか?)


これで、デバッグしし易くなった。



アクションは、「Webページからデータを抽出する」なんですが、

青い人間の設計なのか(自分の若いときには、そうしたかな)、

Webヘルパーのウインドウが起動されるよ!






ここで、取得した表示位置でマウスを左クリックしてメニューを表示させて「要素の選択」

から「テキスト」を選んで取得したいものを選びました!



ここまでは、すべて順調でしたが。


改行コードが含まれていてうまく変数に入りません!


結論から!

アクションの「テキスト」ー>「テキストの分割」を選ぶとうまくいった

正規表現が使えるようにして、区切り記号を「\r\n」にすればOKだ!




※ここで注意したいのは、マイクロソフトの改行は(NewLine)

\r\nと言う事です。

勿論、「\n\r」じゃないですよ、最後に「\n」ですよ!

(自分の為に強調して書かせてもらいました、因みにコードは(\r\n、0x0D0A)です

UNIXの改行コードはLF

(Macの改行コードはCR)ですね、


Webページから取り出しのほやほやは、これ













最後に、色々検証した画像をはりました!


結論とまとめ!

正規表現を使うと、改行がうまく使える!
但し改行コードは、「\r\n」である。

昔のプリンターのなごりと聞いたことがある、
機械なので、元に復帰してから次の位置(改行)する。
(ラインフィードもあるが、頭が痛くなるのでここまで!)

PADでは、正規表現が使える
・テキストを置換する
・テキストの解析
・テキスト置換

結構いい感じかな!(巨大な会社なので、このくらいは……)














2021年7月18日日曜日

Pythonのリスト型のデータを削除する(delが便利)

指定位置の削除は、pop,delで可能

(0からスタートなので注意!)


*リスト変数名.pop(消したいindex番号)

lst.pop(1)

*すべてクリアは

lst.clear()


*delは便利そうです、すべてクリアは、すべての範囲指定すればできる

del lst[1] 一番目の要素を削除

del lst[:] すべてクリア(括弧内のコロンは、最初~最後の要素を表現します)




以下参考のサンプル

 >>> lst = list( range(5) )

>>> lst

[0, 1, 2, 3, 4]

>>> lst.clear()

>>> lst

[]

>>>

>>>

>>> lst = list( range(5) )

>>> lst

[0, 1, 2, 3, 4]

>>> print( lst.pop(1) )

1

>>> lst

[0, 2, 3, 4]

>>>

>>>


>>> del lst[1]

>>> lst

[0, 3, 4]

>>>

>>> del lst[:]

>>> lst

[]

>>>

>>>

2021年7月8日木曜日

MySQLがハッキングされた!

悪いやつがいる。

公開 2021/04

更新 2021/07

そんなに前ではなかったのですね!

少しでも参考になれば、まだ文章は途中ですが…





MySQLのワードプレスの

 テーブルが消されて、以下のような内容がてテーブルに書かれた!


要約は、9日以内にお金を払え、さもなければテーブルを売り飛ばす!

----------------------------------- + -------------- ----------------- + ------------------ +

| 1 |失われたデータベースを回復してリークを回避するには、http://hn4wg4o6s5nc7763.onionにアクセスし、一意のトークン779fa3e5c3957a62を入力し、必要な量のビットコインを支払って元に戻します。私たちが持っているデータベース:wordpressdb、sandbox、test_db。データベースがダウンロードされ、サーバーにバックアップされます。 9日以内に支払いがない場合は、データベースを落札者に販売するか、それ以外の方法で使用します。このサイトにアクセスするには、Torブラウザを使用していますhttps://www.torproject.org/projects/torbrowser.html | http://hn4wg4o6s5nc7763.onion | 779fa3e5c3957a62 |



-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----- + --------------------- + ------------------ +

| 1 |失われたデータベースを回復してリークを回避するには、http://dbrestore.toにアクセスし、一意のトークンc4af6b9ed16e55e2を入力し、必要な量のビットコインを支払って元に戻します。私たちが持っているデータベース:npdb、wordpressdb、sandbox、testDB。データベースがダウンロードされ、サーバーにバックアップされます。 9日以内に支払いがない場合は、データベースを落札者に販売するか、それ以外の方法で使用します。 | http://dbrestore.to | c4af6b9ed16e55e2 |

+ ---- + -------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------

+ ---- + -------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------------------------------------+-------------------------------+------------------+

|  1 | To recover your lost databases and avoid leaking it: visit http://hn4wg4o6s5nc7763.onion and enter your unique token 779fa3e5c3957a62 and pay the required amount of Bitcoin to get it back. Databases that we have: wordpressdb, sandbox, test_db. Your databases are downloaded and backed up on our servers. If we dont receive your payment in the next 9 Days, we will sell your database to the highest bidder or use them otherwise. To access this site you have use the tor browser https://www.torproject.org/projects/torbrowser.html | http://hn4wg4o6s5nc7763.onion | 779fa3e5c3957a62 |



-----------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+------------------+

|  1 | To recover your lost databases and avoid leaking it: visit http://dbrestore.to and enter your unique token c4af6b9ed16e55e2 and pay the required amount of Bitcoin to get it back. Databases that we have: npdb, wordpressdb, sandbox, testDB. Your databases are downloaded and backed up on our servers. If we dont receive your payment in the next 9 Days, we will sell your database to the highest bidder or use them otherwise. | http://dbrestore.to | c4af6b9ed16e55e2 |

+----+----------------------------------------------------------------------------------------------------------------------------


コマンド一覧


select user,host from mysql.user;

drop user ユーザー名;

show table status where name='WARNING'

Filmora残念

 本アプリで編集が上手くいかない!!


やはり自作がいいのかな?

途中ですが、

特徴

音声


眠いので寝ます



import cv2


import sys,os,time


import pydub

import simpleaudio




class mySound:

    

    def __init__( self, fn ):

        self.sound0 = pydub.AudioSegment.from_file( fn + ".mp4"  ) 

        self.fn = fn

        

    def play( self, start, end, speed=1 ):

        self.sound  = self.sound0[ start*1000: end*1000 ]

        # //sound.export( fn + ".mp3"  , format="mp3", bitrate="127k")

        # //self.sound.export( fn + ".mp3"  , format="mp3", bitrate="254k")


        playObj = simpleaudio.play_buffer(

            self.sound.raw_data,

            num_channels    = self.sound.channels,

            bytes_per_sample= self.sound.sample_width,

            # //sample_rate=int(sound.frame_rate*2)

            sample_rate=int( self.sound.frame_rate*speed)

        )

        return playObj



    def export( self, start, end ):

        self.sound  = self.sound0[ start*1000: end*1000 ]

        self.sound.export( self.fn + ".mp3"  , format="mp3", bitrate="254k")



    def replay( self, tim ):

        

        self.sound  = self.sound0[ tim*1000:]


        playObj = simpleaudio.play_buffer(

            self.sound.raw_data,

            num_channels    =self.sound.channels,

            bytes_per_sample=self.sound.sample_width,

            # //sample_rate=int(sound.frame_rate*2)

            sample_rate=int(self.sound.frame_rate)

        )

        return playObj

        




def dispInfo( img ):


    dougaTm = frame_num * (1/fps)

    mm = dougaTm /60

    ss = dougaTm %60

    ff = dougaTm %60

    cv2.putText(img, "%02d:%02.02f" %( mm, ss ), (30,30), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 2, 8)

    cv2.putText(img, "f:%02d" %( frame_num), (30, 60), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 2, 8)


    cv2.putText(img, "sf:%02d" %( startFrame ), (30, 60+30), cv2.FONT_HERSHEY_COMPLEX, 1, (0,0,255), 2, 8)

    cv2.putText(img, "ef:%02d" %( endFrame ), (30, 60+60), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,255), 2, 8)

    




def dispWin():


    global playObj,snd,startSec, startTm

    global img,frame_num


    cap.set(cv2.CAP_PROP_POS_FRAMES, frame_num )


    ret, img = cap.read()

    frame_num = cap.get(cv2.CAP_PROP_POS_FRAMES)

    print("frame_num", frame_num)


    # //各情報の表示をおこなう

    dispInfo( img )

    cv2.imshow('Video', img )




startFrame  = 0

endFrame    = 0

playSW      = False

recSW       = False

    

    

    


def procPlay():


    global playObj,snd,startSec, startTm

    global img,frame_num

    global startFrame,endFrame

    global playSW, recSW, stopSW

    

    key = ""

    if endFrame <= frame_num:

            playObj.stop()

            stopSW = True

            playSW = False

            recSW  = False


            while True:

                key = cv2.waitKey(0)

                print("key",key)


                if key & 0xFF == 49:

                    startFrame -= 5

                    print("startFrame=", startFrame )

                    dispWin()

    


                if key & 0xFF == 50:

                    startFrame += 5

                    print("startFrame=", startFrame )

                    dispWin()



                if key & 0xFF == 51:

                    endFrame -= 5

                    print("endFrame=", endFrame )

                    dispWin()


                if key & 0xFF == 52:

                    endFrame += 5

                    print("endFrame=", endFrame )

                    dispWin()



    

                if key & 0xFF == 27:

                    tim = ( (1/fps) * frame_num)

                    startSec = tim

                    startTm =  time.time()


                    playObj = snd.replay( tim )

                    return key

                

                

                if key & 0xFF == ord("p") or key & 0xFF == ord("w") :


                    if key & 0xFF == ord("w") :

                        recSW = True

                    else:

                        playSW = True


                    frame_num = startFrame

                    dispWin()


                    tim = ( (1/fps) * frame_num)

                    startSec = tim

                    startTm =  time.time()


                    playObj = snd.replay( tim )

                    return key

    return key



        

        

def inputKey( key ):

        

    global playObj,snd,startSec, startTm

    global img,frame_num

    global startFrame,endFrame

    global playSW, recSW, stopSW

    

    stopSW = False

    while True:

        if key & 0xFF == ord(" "):

            if stopSW:

                tim = ( (1/fps) * frame_num)

                startSec = tim

                startTm =  time.time()


                playObj = snd.replay( tim )

                return key

            else:

                playObj.stop()

                stopSW = True


        # //開始フレーム、終了フレームの設定

        if key & 0xFF == ord("r"):

            startFrame = frame_num

            print("startFrame=", startFrame )

            return key


        if key & 0xFF == ord("s"):

            endFrame = frame_num

            print("endFrame=", endFrame )

            return key


        # //マークフレームの確認

        if key & 0xFF == ord("p") or key & 0xFF == ord("w") :

            playSW = True

            playObj.stop()

            stopSW = True


            frame_num = startFrame

            dispWin()


            tim = ( (1/fps) * frame_num)

            startSec = tim

            startTm =  time.time()


            playObj = snd.replay( tim )

            return key

            


        if key & 0xFF == ord("b"):

            playObj.stop()

            stopSW = True


            frame_num -= fps+1

            dispWin()


        if key & 0xFF == ord("f"):

            playObj.stop()

            stopSW = True


            frame_num += fps-1

            dispWin()


        if key & 0xFF == 8:

            playObj.stop()

            stopSW = True


            frame_num -= 2

            dispWin()


        if key & 0xFF == 13:

            playObj.stop()

            stopSW = True


            # //frame_num += 2

            dispWin()



        # //再度、キー入力待ちをする

        key = cv2.waitKey(0)

        print("key===",key)

            

    # //dispWin()



def wait( speed=1 ):

    global playObj,snd,startSec, startTm

    global img,frame_num

    

    while True:

        key = cv2.waitKey(1)

        if key & 0xFF == ord("q"):

            return key


        sousaKey = [ord(" "), ord("b"), ord("f"), 

                    ord("r"), 

                    ord("s"), 

                    ord("p"), 

                    ord("w"), 

                    8, 13 ]

        if key in sousaKey:

            key = inputKey( key )

            return key

            

        if playSW or recSW:

            procPlay()



            

        realTm =  time.time() - startTm

        # //print( "time.time()=", time.time() )    

        # //print( "realTm=", realTm )    

        tim = ( (1/fps) * frame_num / speed)

        if startSec + realTm >  tim:

            return key



# //----------------------------------------------------------------

# //ここからスタート

# //----------------------------------------------------------------



fn       = "man"

fn       = "testCap"

startSec = 0

endSec   = 200




#Video Source

cap = cv2.VideoCapture( fn + '.mp4') #自分のmp4のpathを入力


frame_num = cap.get(cv2.CAP_PROP_POS_FRAMES)

fps       = cap.get(cv2.CAP_PROP_FPS)

        



# //出力ファイルの設定

fourcc = cv2.VideoWriter_fourcc( *'mp4v')

ret, img = cap.read()

h, w, channels = img.shape

rec = cv2.VideoWriter('douga.mp4', fourcc, fps, (w, h))




snd = mySound( fn )

playObj = snd.play( startSec, endSec )


startTm =  time.time()


# //0秒は、0フレーム

# //1秒は、25フレーム

# //2秒は、50フレーム

pos =fps * startSec

cap.set(cv2.CAP_PROP_POS_FRAMES, pos )





# //----------------------------------------------------

# //メインループ

# //----------------------------------------------------

while True:


    ret, img = cap.read()

    frame_num = cap.get(cv2.CAP_PROP_POS_FRAMES)


    # //終了秒数

    tm        = frame_num /fps

    if tm >= endSec:

        break


    # //各情報の表示をおこなう

    dispInfo( img )


    cv2.imshow('Video', img )

    

    if recSW:

        img_out = img.copy()

        rec.write(img_out)

        print("rec!")



    key = wait( )

    if key & 0xFF == ord("q"):

        snd.export( startFrame, endFrame )

        break


    # //フレームの移動(前に戻る)

    if key & 0xFF == ord("b"):

        frame_num -= 1

        cap.set(cv2.CAP_PROP_POS_FRAMES, frame_num )

        dispInfo( img )




rec.release()

# //playObj.stop()





sys.exit()








# //------------------------------------------------

# //ここでは、動画と音声の結合です

# //------------------------------------------------


import ffmpeg


def concat():


    # //print("concat-1")

    fn_in = "douga"

    fn_in2= "man"

    fn_out ="douga_out.mp4"


    # //print("concat-2")

    if os.path.isfile( fn_out ):

        # //print("concat-3")

        os.remove( fn_out )

    # //print("concat-4")



    instream1= ffmpeg.input( fn_in  + ".mp4")    # video

    instream2= ffmpeg.input( fn_in2 + ".mp3")    # sound


    #コーデックと出力ファイル

    stream = ffmpeg.output( instream1, instream2, fn_out, vcodec="copy", acodec="copy")

    ffmpeg.run(stream,  quiet=True)




concat()






sys.exit()




while True:

    ret, img = cap.read()

    img = cv2.resize(img, (frameWidth, frameHeight))

    cv2.imshow('Video', img)

    # //print('ret=', ret)


    # qを押すと止まる。

    if cv2.waitKey(50) & 0xFF == ord('q'):

        break