사용자:Utoleetest/mass upload

개요[편집 | 원본 편집]

이 스크립트는 리브레 위키에 여러 개의 파일을 한 번에 올릴 때 유용한 스크립트입니다.

사용방법[편집 | 원본 편집]

  • 우선 pywikibot에서 pwb.py가 있는 디렉토리에서 images 폴더를 만듭니다.
  • 그 다음에 images 폴더에서 upload_file.json을 다음과 같이 작성합니다. 여러 개 업로드할 때에는 아래 있는 오브젝트 여러 개로 구성된 리스트로 만들어줍니다.
[
  {
    "name": "(파일이름)",
    "wikiname": "(위키상에서 파일 이름)",
    "explanation": "(파일설명)",
    "reference": "(파일의 출처)",
    "date": "(파일 업로드 날짜)",
    "author": "(파일 저작자)",
    "misc": "(파일에 대한 기타 설명)",
    "license": "(라이선스)",
    "comment": "(파일 업로드시에 설명 추가)",
    "category": [ (분류 이름)]
  }
]
  • 작성 규칙은 다음과 같습니다. 위의 JSON 파일에 있는 내용은 틀 안에 작성되므로 분류 이름을 제외하고는 파이프 문자(|)를 사용하시면 안 됩니다.
    • 파일이름 - images 디렉토리에 저장된 파일 이름을 그대로 쓰셔야 합니다.
    • 위키 상의 파일이름 - 위키 상에서 지정할 파일 이름을 쓰시면 됩니다. 쓰지 않으면 파일이름과 동일한 파일 이름으로 위키에 업로드됩니다.
    • 파일 설명 - 파일 설명을 작성합니닫.
    • 파일의 출처 - 파일의 출처를 작성합니다.
    • 파일 업로드 날짜 - 파일 업로드 날짜를 작성합니다.
    • 파일 저작자 - 파일을 제작한 저작자 정보를 기록합니다.
    • 기타 설명 - 파일에 대한 기타 설명을 작성합니다.
    • 라이선스 - 분류:저작권 틀을 참조해서 저작권에 맞게 작성해주세요. 지정하지 않으면 비자유 저작물({{공정 이용}})으로 지정됩니다.
    • 파일 업로드시에 설명 추가
    • 분류 이름 - 이 파일의 분류를 리스트 형태로 작성하시면 됩니다. 분류랑 표현 키값을 다르게 지정하고 싶으면 "분류명|키값" 형태로 파이프 문자를 활용해서 작성하시면 됩니다.
  • 그 다음 images 디렉토리에 원하는 파일들을 가져옵니다.
  • 마지막으로 아래의 스크립트를 mass_upload.py라는 이름으로 scripts/userscripts 디렉토리에 저장한 후에 pwb.py가 있는 디렉토리에서 다음과 같이 명령어를 실행시키면 파일을 여러 개 올릴 수 있습니다.
> python pwb.py mass_upload
  • 스크립트 내용
import re, json
import pywikibot

site = pywikibot.Site('ko', 'libre')

with open('./images/upload_file.json', 'r', encoding='utf-8') as f:
    objs = json.load(f)

for obj in objs:
    # 페이지 이름
    page = pywikibot.Page(site, obj['wikiname'] if obj.get('wikiname') else obj['name'], ns=6)

    category_text = ""
    for cat in obj['category']:
        category_text += f"[[분류:{cat}]]"

    # 페이지 설명
    page.text = f'''== 파일의 설명 ==
{{{{파일 정보
|설명={obj['explanation'] if obj.get('explanation') else ''}
|출처={obj['reference'] if obj.get('reference') else ''}
|날짜={obj['date'] if obj.get('date') else ''}
|만든이={obj['author'] if obj.get('author') else ''}
|기타={obj['misc'] if obj.get('misc') else ''}
}}}}

== 라이선스 ==
{{{{{obj['license'].upper() if obj.get('license') else '퍼옴'}}}}}
{category_text}
'''
    site.upload(page, source_filename=f"./images/{obj['name']}", comment=obj['comment'] if obj.get('comment') else '')