漁滒 发表于 2024-11-7 17:41

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

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


## 编写

编写时为了方便实时查看显示,一般会使用pycharm等编辑器进行。

其中大概率会插入不少的图片,如果在发布前一张一张上传到论坛图床,再一个一个替换原来的文本,这会对发布产生非常大的工作量。

所以我就在想有什么办法可以在本地正常编写,又可以一键发布到论坛上呢?我就想编写一个脚本来进行批量上传

为了方便匹配文章中出图片的位置,一般使用一个标准的命名,我使用的是`!(001.jpg)`



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




此时编写就可以实时查看内容,非常方便插入图片等系列编写

## 上传

当编写完成后,需要将图片一次性上传到论坛图床

因为我使用的是360极速浏览器发布,所以代码也是基于360极速浏览器的,其他浏览器是类似的

首先进入论坛板块,查看板块的fid



例如【web逆向】板块的fid就是5

然后直接关闭浏览器

```python

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()))
    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, encrypted_value
            crypto = AES.new(key=key, mode=AES.MODE_GCM, nonce=nonce)
            value = crypto.decrypt(encrypted_value)[:-16].decode()
      else:
            value = win32crypt.CryptUnprotectData(encrypted_value).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 > ', first=True).attrs['value']
    hash = response.html.find('#imgattachform > ', 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' + aid + '')
    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】的文件,里面的链接已经被替换为可以直接发布到论坛的格式

打开浏览器进入到需要发布的页面



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

bgwu666 发表于 2024-11-12 20:17

劝退了,只能在应该是360极速浏览器下登录论坛才能运行,我用的是Edge,程序取不到我这里的cookie,自己修改的话也不知道Edge的加密方式。不过程序思路很赞!

漁滒 发表于 2024-11-12 23:06

bgwu666 发表于 2024-11-12 20:17
劝退了,只能在应该是360极速浏览器下登录论坛才能运行,我用的是Edge,程序取不到我这里的cookie,自己修 ...

下面文章中给出了其他浏览器cookie储存的位置,可以参考
https://mp.weixin.qq.com/s/lhlV43ka7_QM72CS6FVr_g

15188359377 发表于 2024-11-7 18:36

热心网友发来贺电

逐雅斋 发表于 2024-11-7 18:40

这个牛逼啊!真会玩!

Hmily 发表于 2024-11-8 10:32

感谢漁滒分享,分类置顶几天供大家参考,并添加到MD上传图片说明处。

anning666 发表于 2024-11-8 10:38

大佬这个思路666~~~

Alanguth 发表于 2024-11-8 11:18

学习一下,感谢大佬

mclii 发表于 2024-11-8 16:41

这个很厉害{:1_921:}

Lychen 发表于 2024-11-12 09:13

新手导报学习学习

deedokke 发表于 2024-11-12 10:38

牛逼啊!真会玩!

Huasuiyue 发表于 2024-11-12 18:23

大佬这个厉害啊!
页: [1] 2
查看完整版本: 编写Markdown文章批量上传图片发布到论坛方法