From 0c7fc73c4068d217897f2f4a933394294942762b Mon Sep 17 00:00:00 2001 From: p23 Date: Thu, 21 Nov 2024 18:14:01 +0000 Subject: [PATCH] 1st commit --- .gitignore | 10 +++ app.py | 42 ++++++++++ db/DBHelper.py | 61 +++++++++++++++ db/pgclass.py | 53 +++++++++++++ ffmpeg_python-0.2.0-py3-none-any.whl | Bin 0 -> 25024 bytes grpc/grpcServer.py | 88 +++++++++++++++++++++ grpc/protobuf/igapi.proto | 23 ++++++ grpc/protobuf/note.txt | 3 + ig/IG.py | 113 +++++++++++++++++++++++++++ ig/ctxPictuterProma.py | 26 ++++++ requirements.txt | 7 ++ resource/OpenSans-Regular.ttf | Bin 0 -> 217276 bytes settings.json | 1 + utils/const.py | 36 +++++++++ utils/fileProcessor.py | 107 +++++++++++++++++++++++++ utils/settingLoader.py | 16 ++++ utils/shareclass.py | 19 +++++ utils/tbProcessor.py | 51 ++++++++++++ 18 files changed, 656 insertions(+) create mode 100644 .gitignore create mode 100644 app.py create mode 100644 db/DBHelper.py create mode 100644 db/pgclass.py create mode 100644 ffmpeg_python-0.2.0-py3-none-any.whl create mode 100644 grpc/grpcServer.py create mode 100644 grpc/protobuf/igapi.proto create mode 100644 grpc/protobuf/note.txt create mode 100644 ig/IG.py create mode 100644 ig/ctxPictuterProma.py create mode 100644 requirements.txt create mode 100644 resource/OpenSans-Regular.ttf create mode 100644 settings.json create mode 100644 utils/const.py create mode 100644 utils/fileProcessor.py create mode 100644 utils/settingLoader.py create mode 100644 utils/shareclass.py create mode 100644 utils/tbProcessor.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a3fa2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.env +__pycache__ +session.json +traceback.json +test.py + +tmp +tmp/* +testFiles +testFiles/* \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..b6da20a --- /dev/null +++ b/app.py @@ -0,0 +1,42 @@ +import os, sys + +from sqlalchemy import create_engine +from instagrapi import Client +# from dotenv import load_dotenv + +from utils import shareclass +from ig import IG +from db import pgclass +from grpc import grpcServer +from utils.const import DEBUG + +# load_dotenv() + +# Database +PG_HOST = os.environ.get("PG_HOST", None).strip() +PG_PORT = os.environ.get("PG_PORT", None).strip() +PG_NAME = os.environ.get("PG_NAME", None).strip() +PG_USER = os.environ.get("PG_USER", None).strip() +PG_PASS = os.environ.get("PG_PASS", None).strip() +engine = create_engine('postgresql+psycopg2://%s:%s@%s:%s/%s'%(PG_USER, PG_PASS, PG_HOST, PG_PORT, PG_NAME)) +pgclass.Base.metadata.create_all(engine) +print("[V] Database Connected") + +# IG Login +cl = Client() +shareclass.Shared(cl, engine) # Shared Class +if not DEBUG and not IG.login(): + sys.exit(0) + +# grpc server should have... +# - Get account info (a kind of checkalive) +# - Get media info (a kind of checkalive) +# - Upload media (預設客戶端給我id) +# - Delete media +# - Login + +# IG統一保存code + +# run grpc +if __name__ == "__main__": + grpcServer.serve() diff --git a/db/DBHelper.py b/db/DBHelper.py new file mode 100644 index 0000000..d466a8f --- /dev/null +++ b/db/DBHelper.py @@ -0,0 +1,61 @@ +from typing import Tuple, Dict + +from db import pgclass +from utils import shareclass + +# 獲取單一文章 +def solo_article_fetcher(key:int) -> Dict | None: + table = pgclass.SQLarticle + ftab = pgclass.SQLfile + resfn = {} + + with shareclass.Shared.db_get_session() as session: + # query + res = session.query(table).filter(table.id == key, table.mark == "visible").first() + if res is None: return None + + # mapping + resfn.update({"id": res.id, + "ctx": res.ctx, + "igid": res.igid, + "mark": res.mark, + "reference": res.reference, + "hash": res.hash, + "created_at": res.created_at, + "ip": res.ip + }) + + # file + resfn["files"] = [ f[0] for f in session.query(ftab.id).filter(ftab.reference == res.hash).all() ] + + return resfn + +# 獲取檔案 +def solo_file_fetcher(id:int) -> Dict | None: + table = pgclass.SQLarticle + ftab = pgclass.SQLfile + + with shareclass.Shared.db_get_session() as session: + fres = session.query(ftab).filter(ftab.id == id).first() + if fres is None: # 檢查檔案是否存在 + return None + + article = session.query(table).filter(table.hash == fres.reference, table.mark == 'visible').first() + if article is None: # 檢查文章本體是否存在/可以閱覽 + return None + + # mapping + resfn = { + "type": fres.type, + "binary": fres.binary + } + + return resfn + +# 寫入IG狀態 +def solo_article_updater(id:int, code:str): + table = pgclass.SQLarticle + with shareclass.Shared.db_get_session() as session: + res = session.query(table).filter(table.id == id).first() + res.igid = code + session.commit() \ No newline at end of file diff --git a/db/pgclass.py b/db/pgclass.py new file mode 100644 index 0000000..59f5883 --- /dev/null +++ b/db/pgclass.py @@ -0,0 +1,53 @@ +from sqlalchemy import Column, String, TIMESTAMP, func, BIGINT, LargeBinary, ARRAY +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() + +class SQLarticle(Base): + __tablename__ = 'posts' + + id = Column(BIGINT, primary_key=True) + created_at = Column(TIMESTAMP(timezone=True), server_default=func.now()) + hash = Column(String) + ctx = Column(String) + igid = Column(String) + mark = Column(String) + ip = Column(String) + reference = Column(BIGINT) + + def __repr__(self): + return f"" + +class SQLlog(Base): + __tablename__ = 'logs' + + id = Column(BIGINT, primary_key=True) + created_at = Column(TIMESTAMP(timezone=True), server_default=func.now()) + message = Column(String) + source = Column(String) + + def __repr__(self): + return f"" + +class SQLfile(Base): + __tablename__ = 'files' + + id = Column(BIGINT, primary_key=True) + created_at = Column(TIMESTAMP(timezone=True), server_default=func.now()) + type = Column(String) + reference = Column(String) + binary = Column(LargeBinary) + + def __repr__(self): + return f"" + +class SQLuser(Base): + __tablename__ = 'users' + + id = Column(BIGINT, primary_key=True) + user = Column(String) + password = Column(String) # hash , sha512 + permission = Column(ARRAY(String)) + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/ffmpeg_python-0.2.0-py3-none-any.whl b/ffmpeg_python-0.2.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..5d68fcc023efb164956df70311cace5f4ac16076 GIT binary patch literal 25024 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 literal 0 HcmV?d00001 diff --git a/grpc/grpcServer.py b/grpc/grpcServer.py new file mode 100644 index 0000000..4375962 --- /dev/null +++ b/grpc/grpcServer.py @@ -0,0 +1,88 @@ +from typing import Tuple +import os + +from ig import ctxPictuterProma, IG +from db import DBHelper +from utils import fileProcessor +from utils.const import DEBUG + +# returns (errmsg | code, errcode) +def upload(aid:int) -> Tuple[str, int]: + # 抓取文章本體 + article = DBHelper.solo_article_fetcher(key = aid) + if article is None: + return "Post not found", 1 + + # 抓取檔案 + files = [ + DBHelper.solo_file_fetcher(id = k) + for k in article["files"] + ] + if None in files: + return "File not found", 1 + + # 轉出暫存檔案 + tmp_path:list = [] + for t in files: + filename, err = fileProcessor.file_saver(t.get("type"), t.get("binary")) + if err: # 如果錯誤 + return filename, 1 + tmp_path.append(filename) + + # 合成文字圖 + proma_file = ctxPictuterProma.new_proma(article["ctx"]) + tmp_path = [proma_file] + tmp_path + + # 送交 IG 上傳 + if not DEBUG: + media = IG.upload_media(article["ctx"], tmp_path) + if media is None: + return "Upload failed", 1 + else: + media = {"code":"fake_data"} + + # 刪除檔案 + for t in tmp_path: + os.remove(t) + + return media["code"], 0 + + +# return (errmsg, code) +def remove(aid:int) -> Tuple[str, int]: + # 抓取文章本體 + article = DBHelper.solo_article_fetcher(key = aid) + if article is None: + return "Post not found", 1 + + err = IG.delete_media(article["igid"]) + if err: + return "Remove failed", 1 + + return "OK", 0 + + +def serve(): + pass + +def _serve(): + print(IG.account_info()) + + pass + + return + aid = 57 + + msg, err = upload(aid) + if err: + print(msg) + return + + input("Press any key...") + + DBHelper.solo_article_updater(id=aid, code=msg) + + msg, err = remove(aid) + if err: + print(msg) + return \ No newline at end of file diff --git a/grpc/protobuf/igapi.proto b/grpc/protobuf/igapi.proto new file mode 100644 index 0000000..ff47db3 --- /dev/null +++ b/grpc/protobuf/igapi.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; + +service IGAPI { + rpc login () returns (Reply) {} + + rpc account_info () returns (Reply) {} + + rpc upload (Request) returns (Reply) {} + + rpc delete (Request) returns (Reply) {} + + rpc setting (Request) returns (Reply) {} +} + +message Request { + int code = 1; + repeated string args = 2; +} + +message Reply { + int err = 1; + map result = 2; +} \ No newline at end of file diff --git a/grpc/protobuf/note.txt b/grpc/protobuf/note.txt new file mode 100644 index 0000000..1a0366a --- /dev/null +++ b/grpc/protobuf/note.txt @@ -0,0 +1,3 @@ +Response: + code: int + message: str \ No newline at end of file diff --git a/ig/IG.py b/ig/IG.py new file mode 100644 index 0000000..bdc32af --- /dev/null +++ b/ig/IG.py @@ -0,0 +1,113 @@ +import os +from typing import List + +from instagrapi import Client + +from utils import shareclass +from utils.tbProcessor import easyExceptionHandler +from utils.const import DEVICE + +# login +def login() -> int: + cl:Client = shareclass.Shared.ig_get_client() + + # Env + ACCOUNT_USERNAME = os.getenv("ACCOUNT_USERNAME", None).strip() + ACCOUNT_PASSWORD = os.getenv("ACCOUNT_PASSWORD", None).strip() + + # session + session = None + if os.path.exists("./session.json"): + session = cl.load_settings("session.json") + + cl.delay_range = [2, 5] + # login with sessionid + cl.set_device(DEVICE) + sessionSuccess = True + if session: + print("[*] Trying logging in with session") + try: + cl.set_settings(session) + cl.login(ACCOUNT_USERNAME, ACCOUNT_PASSWORD) + cl.get_timeline_feed() + except: + sessionSuccess = False + else: + sessionSuccess = False + + # login with username and password + if not sessionSuccess: + print("[*] Trying logging in with username and password") + try: + old_session = cl.get_settings() + cl.set_settings({}) + cl.set_uuids(old_session["uuids"]) + cl.login(ACCOUNT_USERNAME, ACCOUNT_PASSWORD) + cl.get_timeline_feed() + except: + print("[X] Cannot log in") + return 0 + + cl.dump_settings("session.json") + + # return + username = cl.account_info().dict()["username"] + print("[V] Logged as %s"%username) + return 1 + + +# Get account info +def account_info() -> dict | None: + cl:Client = shareclass.Shared.ig_get_client() + + try: + info = cl.account_info().dict() + return info + except Exception as e: + easyExceptionHandler(e) + return None + + +# Get media info +def media_info(code:str) -> dict | None: + cl:Client = shareclass.Shared.ig_get_client() + + try: + pk = cl.media_pk_from_code(code) + info = cl.media_info(pk).dict() + return info + except Exception as e: + easyExceptionHandler(e) + return None + + +# Upload media +def upload_media(ctx:str, paths:List[str]) -> dict | None: + cl:Client = shareclass.Shared.ig_get_client() + + try: + # uplaod + if len(paths) == 0: return None + elif len(paths) == 1: + media = cl.photo_upload(path=paths[0], caption=ctx).dict() + else: + media = cl.photo_upload(path=paths[0], caption=ctx).dict() + + return media + except Exception as e: + easyExceptionHandler(e) + return None + + +# Delete Media +def delete_media(code:str) -> int: + cl:Client = shareclass.Shared.ig_get_client() + + try: + media_pk = str(cl.media_pk_from_code(code)) + media_id = cl.media_id(media_pk) + cl.media_delete(media_id) + return 0 + except Exception as e: + easyExceptionHandler(e) + return 1 \ No newline at end of file diff --git a/ig/ctxPictuterProma.py b/ig/ctxPictuterProma.py new file mode 100644 index 0000000..1b419ab --- /dev/null +++ b/ig/ctxPictuterProma.py @@ -0,0 +1,26 @@ +import time +import hashlib +import os + +from PIL import Image, ImageDraw, ImageFont + +from utils.const import PROMA_HEIGHT, PROMA_WIDTH, PROMA_FONT, PROMA_FONTSIZE, TMP_DIR + +def new_proma(ctx:str): + img = Image.new(mode="RGB", + size=(PROMA_WIDTH, PROMA_HEIGHT), + color=(255, 255, 255)) # 靠 沒版型阿 + + font = ImageFont.truetype(PROMA_FONT, PROMA_FONTSIZE, encoding='utf-8') + + draw:ImageDraw.ImageDraw = ImageDraw.Draw(img) + draw.text(xy=(0, 0), + text=ctx, + font=font, + fill=(0, 0, 0)) + + filename = TMP_DIR + hashlib.sha512( str(time.time()).encode() ).hexdigest() + ".jpg" + img.save(filename) + filename = os.path.abspath(filename) + + return filename \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..351c394 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +instagrapi +sqlalchemy +protobuf==5.28.3 +Pillow +pillow-heif +asyncio +psycopg2 \ No newline at end of file diff --git a/resource/OpenSans-Regular.ttf b/resource/OpenSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2e31d02424ed50b9e05c19b5d82500699a6edbb0 GIT binary patch literal 217276 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%0DHhV?N1s&&lC=`j?-^cJA^!2jed0`4 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 }c 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

dg4umb* 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 literal 0 HcmV?d00001 diff --git a/settings.json b/settings.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/settings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/utils/const.py b/utils/const.py new file mode 100644 index 0000000..f4b4cac --- /dev/null +++ b/utils/const.py @@ -0,0 +1,36 @@ +DEBUG = False + +# fake device +DEVICE = { + "app_version": "269.0.0.18.75", + "android_version": 26, + "android_release": "8.0.0", + "dpi": "480dpi", + "resolution": "1080x1920", + "manufacturer": "OnePlus", + "device": "Asus", + "model": "K00G", + "cpu": "qcom", + "version_code": "314665256", +} + +# type define {mine:ext} +FILE_MINE_TYPE = { + "image/jpeg": "jpg", + "image/pjpeg": "jfif", + "image/png": "png", + "image/heic": "heic", + "image/heif": "heif", + "image/webp": "webp", + "video/mp4": "mp4", + "video/quicktime": "mov", + "video/hevc": "hevc", +} + +TMP_DIR = "./tmp/" + +# content picture +PROMA_WIDTH = 600 +PROMA_HEIGHT = 600 +PROMA_FONT = "./resource/OpenSans-Regular.ttf" +PROMA_FONTSIZE = 40 \ No newline at end of file diff --git a/utils/fileProcessor.py b/utils/fileProcessor.py new file mode 100644 index 0000000..24f27c7 --- /dev/null +++ b/utils/fileProcessor.py @@ -0,0 +1,107 @@ +import time +import os +import io +from typing import Tuple +import subprocess + +from hashlib import sha512 +from PIL import Image +from pillow_heif import register_heif_opener +import ffmpeg + +from utils.const import FILE_MINE_TYPE, TMP_DIR +from utils.tbProcessor import easyExceptionHandler + +register_heif_opener() + +def image_conventer(filename:str, binary: bytes) -> int: + try: + fio = io.BytesIO(binary) + img:Image.Image = Image.open(fio) + img = img.convert("RGB") + img.save(filename, "JPEG", quality=95) + return 0 + except Exception as e: + easyExceptionHandler(e) + return 1 + + +def read_output(pipe, q): + """ 用於非阻塞讀取 ffmpeg 的 stdout """ + while True: + data = pipe.read(4096) + if not data: + break + q.put(data) + q.put(None) # 標記輸出結束 + + +def video_conventor(filename:str, oriFormat:str, binary:bytes) -> int: + try: + tmpfile = filename+"_tmp" + # write to tempfile + with open(tmpfile, "wb") as f: + f.write(binary) + + # ffmpeg process + process:subprocess.Popen = ( + ffmpeg + .input(tmpfile, format=oriFormat) + .output(filename, format='mp4') + .run_async(pipe_stdin=True, pipe_stdout=True, pipe_stderr=True) + ) + + process.wait() + + # remove tempfile + os.remove(tmpfile) + + return 0 + except Exception as e: + easyExceptionHandler(e) + return 1 + + +def file_writer(filename:str, binary:bytes): + with open(filename, "wb") as f: + f.write(binary) + + +def file_saver(ftype:str, binary:bytes) -> Tuple[str, int]: + """ + ftype -> minetype + binary -> file binary + """ + + # 獲取副檔名 + ext = None + for t in FILE_MINE_TYPE: + if t == ftype: + ext = FILE_MINE_TYPE[t] + if ext is None: + return "Invalid file type", 1 + + # 如果不是 IG 本身支援的檔案 -> 轉檔 + filename = sha512( str(time.time()).encode() ).hexdigest() # 暫存檔名稱 + opt = "" # output file name + if not ( ftype == "image/jpg" or ftype == "image/webp" or \ + ftype == "video/mp4" ): + # 轉圖片 + if ftype.startswith("image"): + opt = os.path.abspath(os.path.join(TMP_DIR, filename+".jpg")) + err = image_conventer(opt, binary) + if err: # 發生錯誤 + return "File convert error", 1 + # 轉影片 + elif ftype.startswith("video"): + opt = os.path.abspath(os.path.join(TMP_DIR, filename+".mp4")) + err = video_conventor(opt, ext, binary) + if err: + return "File convert error", 1 + + # 轉檔完成 + return opt, 0 + else: # 如果是 IG 本身支援的檔案 -> 存檔 + opt = os.path.abspath(os.path.join(TMP_DIR, filename+"."+ext)) + file_writer(opt, binary) + return opt, 0 \ No newline at end of file diff --git a/utils/settingLoader.py b/utils/settingLoader.py new file mode 100644 index 0000000..dacc2f9 --- /dev/null +++ b/utils/settingLoader.py @@ -0,0 +1,16 @@ +import json + +def loadset(): + with open("./settings.json", "r", encoding = "utf-8") as f: + d = json.load(f) + return d + +def writeset(name:str, value): + # 寫入 + d:dict = loadset() + d[name] = value + + with open("./settings.json", "w", encoding = "utf-8") as f: + json.dump(d, f, ensure_ascii=False) + + return d \ No newline at end of file diff --git a/utils/shareclass.py b/utils/shareclass.py new file mode 100644 index 0000000..f5640d9 --- /dev/null +++ b/utils/shareclass.py @@ -0,0 +1,19 @@ +from sqlalchemy.orm import sessionmaker + +class Shared: + _client = None # For instagram + _engine = None # For engine + + @classmethod + def __init__(cls, cl, eng): + cls._client = cl + cls._engine = eng + + @classmethod + def ig_get_client(cls): + return cls._client + + @classmethod + def db_get_session(cls): + Session = sessionmaker(bind=cls._engine) + return Session() \ No newline at end of file diff --git a/utils/tbProcessor.py b/utils/tbProcessor.py new file mode 100644 index 0000000..782a141 --- /dev/null +++ b/utils/tbProcessor.py @@ -0,0 +1,51 @@ +import json +import traceback +import os + +FILENAME = "./traceback.json" + +def prechecker(): + if not os.path.exists(FILENAME): + with open(FILENAME, "w", encoding = "utf-8") as f: + json.dump({"err":{}, "id":0}, f, ensure_ascii=False) + +def load(): + prechecker() + with open(FILENAME, "r", encoding = "utf-8") as f: + d = json.load(f) + return d + +def debug_info_from_exception(exc) -> dict: + exc_type = type(exc).__name__ + exc_message = str(exc) + exc_traceback = traceback.format_exception(type(exc), exc, exc.__traceback__) + + debug_info = { + "Exception_type": str(exc_type), + "Exception_message": str(exc_message), + "Trackback": str(exc_traceback) + } + + # debug + for s in exc_traceback: print(s) + + return debug_info + +def write(e:Exception): + d:dict = load() + + eid = d["id"] + debug_info = debug_info_from_exception(e) + d["err"][str(eid)] = debug_info + d["id"] += 1 + + with open(FILENAME, "w", encoding = "utf-8") as f: + json.dump(d, f, ensure_ascii=False) + + return eid + +def easyExceptionHandler(e:Exception): + exc_type = type(e).__name__ + exc_message = str(e) + exc_saved_id = write(e) + print(f"[X] Exception id {exc_saved_id} : {exc_type} : {exc_message}") \ No newline at end of file