编写md文章批量上传图片发布到论坛方法

查看 31|回复 2
作者:漁滒   
@TOC
编写
编写时为了方便实时查看显示,一般会使用pycharm等编辑器进行。
其中大概率会插入不少的图片,如果在发布前一张一张上传到论坛图床,再一个一个替换原来的文本,这会对发布产生非常大的工作量。
所以我就在想有什么办法可以在本地正常编写,又可以一键发布到论坛上呢?我就想编写一个脚本来进行批量上传
为了方便匹配文章中出图片的位置,一般使用一个标准的命名,我使用的是  ![001.jpg](001.jpg)


001.jpg (16.92 KB, 下载次数: 0)
下载附件
2024-11-7 17:36 上传

同时真实的图片也放到同目录内


002.jpg (17.16 KB, 下载次数: 0)
下载附件
2024-11-7 17:36 上传

此时编写就可以实时查看内容,非常方便插入图片等系列编写
上传
当编写完成后,需要将图片一次性上传到论坛图床
因为我使用的是360极速浏览器发布,所以代码也是基于360极速浏览器的,其他浏览器是类似的
首先进入论坛板块,查看板块的fid


003.jpg (31.17 KB, 下载次数: 0)
下载附件
2024-11-7 17:36 上传

例如【web逆向】板块的fid就是5
然后直接关闭浏览器
import re
import os
import json
import time
import base64
import psutil
import sqlite3
import win32crypt
import requests_html
from Crypto.Cipher import AES
from requests_toolbelt.multipart.encoder import MultipartEncoder
def main():
    chrome_name = '360ChromeX'
    requests = requests_html.HTMLSession()
    for process in psutil.process_iter():
        if chrome_name in process.name():
            process.kill()
    file_path = os.path.join(os.getenv("LOCALAPPDATA"), chrome_name, 'Chrome', 'User Data', 'Local State')
    state = json.load(open(file_path, 'r', encoding='utf-8'))['os_crypt']
    if state['audit_enabled']:
        key = win32crypt.CryptUnprotectData(base64.b64decode(state['encrypted_key'].encode())[5:])[1]
    else:
        key = b''
    file_path = os.path.join(os.getenv("LOCALAPPDATA"), chrome_name, 'Chrome', 'User Data', 'Default', 'Network', 'Cookies')
    conn = sqlite3.connect(file_path)
    for name, encrypted_value, host_key, path in conn.execute('select name, encrypted_value, host_key, path from cookies'):
        if not encrypted_value:
            continue
        if encrypted_value[:3] == b'v10':
            nonce, encrypted_value = encrypted_value[3:15], encrypted_value[15:]
            crypto = AES.new(key=key, mode=AES.MODE_GCM, nonce=nonce)
            value = crypto.decrypt(encrypted_value)[:-16].decode()
        else:
            value = win32crypt.CryptUnprotectData(encrypted_value)[1].decode()
        requests.cookies.set(name, value, domain=host_key, path=path)
    conn.close()
    fid = '5'  # 根据自己发布在什么板块修改fid
    response = requests.get('https://www.52pojie.cn/forum.php?mod=post&action=newthread&fid=' + fid)
    uid = response.html.find('#imgattachform > [name="uid"]', first=True).attrs['value']
    hash = response.html.find('#imgattachform > [name="hash"]', first=True).attrs['value']
    formhash = response.html.find('#formhash', first=True).attrs['value']
    file_name = os.path.join(os.getcwd(), 'readme.md')
    with open(file_name, 'r', encoding='utf-8') as f:
        md = f.read()
    for img_name, img_path in re.findall('\n\!\[(.+?\.jpg)\]\((.+?)\)', md):
        print(img_name)
        img_full_path = os.path.join(os.getcwd(), img_path)
        fields = {
            "Filedata": (img_name, open(img_full_path, 'rb'), 'image/jpeg'),
            "Filename": file_name,
            "filetype": '.' + file_name.split('.')[-1],
            "formhash": formhash,
            "uid": uid,
            "hash": hash,
            "type": "image"
        }
        multipart = MultipartEncoder(
            fields=fields,
            boundary='----WebKitFormBoundaryLmfEqyU3MTt1Bgy0'
        )
        headers = {
            "Content-Type": multipart.content_type,
        }
        data = multipart.to_string()
        aid = requests.post('https://www.52pojie.cn/misc.php?mod=swfupload&action=swfupload&operation=upload&fid=' + fid, headers=headers, data=data).content.decode()
        print(aid)
        time.sleep(4)
        md = md.replace('\n![' + img_name + '](' + img_path + ')', '\n[attachimg]' + aid + '[/attachimg]')
    with open(file_name.replace('.md', '_img.md'), 'w', encoding='utf-8') as f:
        f.write(md)
if __name__ == '__main__':
    main()
将python代码保存到与md文件同目录,根据fid修改上面python代码的fid值,最后运行代码
此时就会自动上传md文件中所有引用到的图片到板块
当脚本完成后,会生成一个带有【_img.md】的文件,里面的链接已经被替换为可以直接发布到论坛的格式
打开浏览器进入到需要发布的页面


004.jpg (44.66 KB, 下载次数: 0)
下载附件
2024-11-7 17:36 上传

此时发帖就会发现提示有多张图片未使用,直接点击使用按钮,然后点击发布md内容,将带有【_img.md】的的文件里面所有的内容复制进去,就可以完美发帖了

上传, 下载次数

15188359377   

热心网友发来贺电
逐雅斋   

这个牛逼啊!真会玩!
您需要登录后才可以回帖 登录 | 立即注册

返回顶部