侧边栏壁纸
  • 累计撰写 26 篇文章
  • 累计创建 19 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

【备份】一点没什么用的脚本备份

panedioic
2020-05-07 / 0 评论 / 0 点赞 / 31 阅读 / 1,596 字

0x01 区块链浏览器爬虫

import requests
import time

def find_node_by_block_chain(chain='ether'):
    pass

def announce_node_to_block_chain(ip, port, chain='ether'):
    pass

block_list_url = 'https://api.yitaifang.com/index/largetxs/?page={page}&limit={limit}'
block_info_url = 'https://api.yitaifang.com/index/transactions/?page={page}&number={number}&limit={limit}'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

LIMIT_NUM = 1000
REQ_NUM = 2000

# OPENDANMAKU 0x4f50454e44414e4d414b55204
# protocal name
PTC_NAME = '0x4f50454e44414e4d414b55'

# 9939615


req = requests.get(block_list_url.format(page=1, limit=20), headers=headers)
pages = req.json()['data']['result'][0]['blockNumber']
print(pages)

pages=9939630
node_list=[]

for block_num in range(pages, pages-10000, -1):
    if(block_num%10==0):
        print('Chicking block of %s... (%s nodes has been found.)'%(block_num, len(node_list)))
        time.sleep(5)
    req = requests.get(block_info_url.format(page=1,number=block_num,limit=LIMIT_NUM), headers=headers)
    block = req.json()
    for trans in block['data']['result']:
        if(trans['input'][:24]==PTC_NAME):
            print('Found node in block %s'%block_num)
            print('Input: %s'%bytes.fromhex(trans['input'][2:]))
            node_list.append(trans['input'])

exit()


#if(int(item['blockNumber'])%10==0):
print('Chicking block of %s...'%item['blockNumber'])
ii=1
req2 = requests.get(block_info_url.format(page=ii,number=item['blockNumber'],limit=LIMIT_NUM), headers=headers)
block = req2.json()
for trans in block['data']['result']:
    if(trans['input'][:24]==PTC_NAME):
        print('Found server in block %s'%item['blockNumber'])
        print('Input: %s'%bytes.fromhex(trans['input']))

0x02 自己放到区块链上的一张图片

# file 2 hexstr
'''
with open("E:/Pictures/test2.jpg", "rb") as f:
    data = f.read()
    print(len(data))
    print(hex(int.from_bytes(data[:20480], byteorder='big')))
'''


import requests
from PIL import Image
import time

headers={
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Host': 'ropsten.ethhelp.cn',
    'Origin': 'http://ropsten.ethhelp.cn',
    'Proxy-Connection': 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}

bc_url = 'http://ropsten.ethhelp.cn/tx'

transactions = [
    '0x90420a0d29ec6675c2b6ae674c2dc7a56f338589984d2dc112c7cfbfba2c1072',
    '0xc94e8f5db4f5af332ae6d8bee65b572746bfd345bcf58e7243471125450cc96f',
    '0xee020f4659aa89aecd73b02b03b58eb81e661c0f82b5fe19f601daa23a4bcacc',
    '0x9f4cd87a90e792a4c10229673c14e4fe49c3c3a028994ec3929fb589ee6ec323',
    '0xb9eadf1dbc247e7273a096645fb34aeefa63f6b75c16449b49e9ef5d6c126346',
]

i=0
with open('test.png', 'wb') as f:
    for trans in transactions:
        req = requests.post(bc_url, headers=headers, data={'hash': trans})
        f.write(bytes.fromhex(req.json()['data']['input'][2:]))
        time.sleep(5)
        i+=1
        print('Downloading finished %s of %s'%(i, len(transactions)))

img = Image.open('test.png')

img.show()

0x03 python发送b站直播弹幕

#encoding=utf-8
# Created by double lin at 2018/10/10
# https://blog.csdn.net/qq_32670879/article/details/83002369
import requests
import time
form_data = {
    'color': '65532',
	'fontsize': '25',
	'mode': '1',
	'msg': 'test33333333',
	'rnd': int(time.time()),
	'roomid': '1136753',
	'csrf_token': 'cce335cbfa5bfd292a049b813175bd12',
	'csrf': 'cce335cbfa5bfd292a049b813175bd12'
}
# 设置cookie值帮助我们在发送弹幕的时候,服务器识别我们的身份
cookie = {
}
res = requests.post('https://api.live.bilibili.com/msg/send', cookies=cookie, data=form_data)
print (res.status_code)

print (res.json())

0x04 JavaScript b站弹幕姬

const textEncoder = new TextEncoder('utf-8');
const textDecoder = new TextDecoder('utf-8');

const readInt = function(buffer, start, len) {
    let result = 0
    for (let i = len - 1; i >= 0; i--) {
        result += Math.pow(256, len - i - 1) * buffer[start + i]
    }
    return result
}

const writeInt = function(buffer, start, len, value) {
    let i = 0
    while (i < len) {
        buffer[start + i] = value / Math.pow(256, len - i - 1)
        i++
    }
}

const encode = function(str, op) {
    let data = textEncoder.encode(str);
    let packetLen = 16 + data.byteLength;
    let header = [0, 0, 0, 0, 0, 16, 0, 1, 0, 0, 0, op, 0, 0, 0, 1]
    writeInt(header, 0, 4, packetLen)
    return (new Uint8Array(header.concat(...data))).buffer
}
const decode = function(blob) {
    return new Promise(function(resolve, reject) {
        let reader = new FileReader();
        reader.onload = function(e) {
            let buffer = new Uint8Array(e.target.result)
            let result = {}
            result.packetLen = readInt(buffer, 0, 4)
            result.headerLen = readInt(buffer, 4, 2)
            result.ver = readInt(buffer, 6, 2)
            result.op = readInt(buffer, 8, 4)
            result.seq = readInt(buffer, 12, 4)
            if (result.op === 5) {
                result.body = []
                let offset = 0;
                while (offset < buffer.length) {
                    let packetLen = readInt(buffer, offset + 0, 4)
                    let headerLen = 16 // readInt(buffer,offset + 4,4)
                    let data = buffer.slice(offset + headerLen, offset + packetLen);
                    let body = textDecoder.decode(data);
                    if (body) {
                        result.body.push(JSON.parse(body));
                    }
                    offset += packetLen;
                }
            } else if (result.op === 3) {
                result.body = {
                    count: readInt(buffer, 16, 4)
                };
            }
            resolve(result)
        }
        reader.readAsArrayBuffer(blob);
    });
}
const ws = new WebSocket('wss://broadcastlv.chat.bilibili.com:2245/sub');
ws.onopen = function() {
    ws.send(encode(JSON.stringify({
        roomid: 5322
    }), 7));
};
// 如果使用的是控制台,这两句一定要一起执行,否侧onopen不会被触发
setInterval(function() {
    ws.send(encode('', 2));
}, 30000);
ws.onmessage = async function(msgEvent) {
    const packet = await decode(msgEvent.data);
    switch (packet.op) {
        case 8:
            console.log('加入房间');
            break;
        case 3:
            const count = packet.body.count
            console.log(`人气:${count}`);
            break;
        case 5:
            packet.body.forEach((body) => {
                switch (body.cmd) {
                    case 'DANMU_MSG':
                        console.log(`${body.info[2][1]}: ${body.info[1]}`);
                        break;
                    case 'SEND_GIFT':
                        console.log(`${body.data.uname} ${body.data.action} ${body.data.num} 个 ${body.data.giftName}`);
                        break;
                    case 'WELCOME':
                        console.log(`欢迎 ${body.data.uname}`);
                        break;
                        // 此处省略很多其他通知类型
                    default:
                        console.log(body);
                }
            })
            break;
        default:
            console.log(packet);
    }
};

0x05 b站收藏夹自动下载(未完工)

import requests
import time
import sys
import you_get
import pymysql

def download(url, path):
    sys.argv = ['you-get', '--playlist', '-o', path, url]
    you_get.main()

#if __name__ == '__main__':
    # 视频网站的地址
    #url = 'https://www.bilibili.com/bangumi/play/ep118488?from=search&seid=5050973611974373611'

    # 视频输出的位置
    #path = 'G:/test'
    #download(url, path)
sql = 'insert into fav_list(avid,title,author,partcount,cover) values(%s,%s,%s,%s,%s);'

def first_use():
    favid=46691401
    params={
        'media_id': '929964401',
        'pn': '1',
        'ps': '20',
        'keyword': '',
        'order': 'mtime',
        'type': '0',
        'tid': '0',
        'jsonp': 'jsonp'
    }
    req_data = requests.get('https://api.bilibili.com/medialist/gateway/base/spaceDetail', params)
    print(req_data.url)
    print(req_data.json()['code'])
    data=req_data.json()
    page_num=(data['data']['info']['media_count']-1)//20+2
    for page in range(1,page_num):
        params['pn']=page
        req_data = requests.get('https://api.bilibili.com/medialist/gateway/base/spaceDetail', params)
        for video in req_data.json()['data']['medias']:
            print(video['id'],end=' ')
            print(video['title'])
            sqldata=[]
            sqldata.append(video['id'])
            sqldata.append(video['title'])
            sqldata.append(video['upper']['name'])
            sqldata.append(video['page'])
            sqldata.append(video['cover'])
            #print(sqldata)
            #发送请求
            image = requests.get(video['cover'])
            with open('F:/favdown/'+str(video['id'])+'.jpg',"wb")as f:
                f.write(image.content)
            download('https://www.bilibili.com/video/av'+str(video['id']),'F:/favdown/av'+str(video['id'])+'.flv')
            exit()
    #data['data']['info']['media_count']==233
    #data['data']['medias'][0]['cover']==xxx
    #cover/id:av/title/upper-name
    #avid,title,cover/favid/author/partcount/date

conn = pymysql.connect(
    host='114.67.107.192',
    port=3306,
    user='root',
    password='',
    database='favdown',
    charset='utf8'
)
# 获取一个光标
cursor = conn.cursor()
first_use()
0

评论区