import streamlit as st import pandas as pd import base64 import hashlib import hmac import base64 import datetime import requests import json import time as t #githubテストコメント # DB Managment import sqlite3 #conn_log = sqlite3.connect('data.db') #c = conn_log.cursor() #conn = sqlite3.connect('Jdream_url.db') #c_jd = conn.cursor() # def create_usertable(): # c.execute('CREATE TABLE IF NOT EXISTS userstable(username TEXT, password TEXT)') # def add_userdata(username, password): # c.execute('INSERT INTO userstable(username, password) VALUES (?,?)', (username,password)) # conn_log.commit() # def login_user(username, password): # c.execute('SELECT * FROM userstable WHERE username = ? AND password = ?', (username,password)) # data = c.fetchall() # return data # def view_all_users(): # c.execute('SELECT * FROM userstable') # data = c.fetchall() # return data # def file_downloader(filename, file_label='File'): # with open(filename, 'rb') as f: # data = f.read() def JDream_api_response(name, id): dt_now = datetime.datetime.now() time = dt_now.strftime('%Y%m%d%H%M%S') secretKey = 'HJD0scmQgboBkOp6nzu9aVEJryLYVXh3' #date = '20221128162000' signature = hmac.new(key=bytes(secretKey,'utf-8'), msg=bytes(id+':'+time,'utf-8'), digestmod=hashlib.sha256).digest() base64_signature = base64.b64encode(signature).decode() url = "https://expert.jdream3.com/app/external_api/supply/auth/info" payload = { "user_id":id, "token":base64_signature, "time":time, "authors":[{"name" : name}] } headers = {'Content-type':"application/json"} t.sleep(1) r = requests.post(url, data=json.dumps(payload), headers=headers) return r def main(): """ Simple Login App """ st.title("Excel for FileMaker データ更新APP") #menu = ["Home","Login","SignUp"] menu = ['Update'] choice = st.sidebar.selectbox("Menu", menu) #JD_data_df = pd.read_sql_query('SELECT * FROM Jdream_url', conn) #submit_btn_DB = st.button('DBのカラム') #ボタンが押されたら処理を実行する #if submit_btn_DB: #st.table(JD_data_df.columns) if choice == "Update": #st.subheader("") #username = st.sidebar.text_input("User Name") # #password = st.sidebar.text_input("Password", type='password') # if st.sidebar.checkbox("Login"): # create_usertable() # result = login_user(username, password) # if result: # st.success("Logged In as {}".format(username)) # task = st.selectbox("Please Select Task", ["Update DB"]) # if task == "Add Post": # st.subheader("Add Your Post") # elif task == "Analytics": # st.subheader("Analytics") # elif task == "Profiles": # st.subheader("Profiles") # user_result = view_all_users() # clean_db = pd.DataFrame(user_result, columns=["username","Password"]) # st.dataframe(clean_db) #if task == "Update DB": id = st.text_input('JDreamIDを入力', 'xxx') old_uploaded_excel = st.file_uploader('古いファイルをアップロード', type='xlsx') new_uploaded_excel = st.file_uploader('新しいファイルをアップロード', type='xlsx') submit_btn_xlsx = st.button('処理実行') #ボタンが押されたら処理を実行する if submit_btn_xlsx: #st.write(pd.read_excel(uploaded_excel)) old_df = pd.read_excel(old_uploaded_excel) #old_df = old_df[['職員番号','氏名','名前カナ','部局名','職名','リンクコピー']] new_df = pd.read_excel(new_uploaded_excel) new_researcher_df = new_df[~(new_df['職員番号'].isin(old_df['職員番号'].unique()))] #JDのAPIでリンクを作成 JDream_url = 'https://expert.jdream3.com/app/author/detail/' JDream_user_url_list = [] for name in new_researcher_df['氏名']: #API接続 try: r = JDream_api_response(name, id) author_id = json.loads(r.text)['data'][0]['authorId'] organization = json.loads(r.text)['data'][0]['organization'] if organization == '北海道大学': #JDream接続リンクを作成 JDream_user_url = JDream_url + author_id else: JDream_user_url = '' except: JDream_user_url = '' JDream_user_url_list.append(JDream_user_url) new_researcher_df['リンクコピー'] = JDream_user_url_list st.write('追加される研究者') st.dataframe(new_researcher_df) csv = new_researcher_df.to_csv(index=False) #st.table(csv_file) #csv = df.to_csv(index=False) b64 = base64.b64encode(csv.encode('utf-8-sig')).decode() href = f'<a href="data:application/octet-stream;base64,{b64}" download="result_utf-8-sig.csv">CSVファイルをダウンロード</a>' #st.markdown(f"CSVファイルのダウンロードはこちら: {href}", unsafe_allow_html=True) st.markdown(f"{href}", unsafe_allow_html=True) # else: # st.warning("Incorrect Username/Password") # elif choice == "Login": # st.subheader("Login Section") # username = st.sidebar.text_input("User Name") # password = st.sidebar.text_input("Password", type='password') # if st.sidebar.checkbox("Login"): # #if password == '12345': # create_usertable() # result = login_user(username, password) # if result: # st.success("Logged In as {}".format(username)) # task = st.selectbox("Task", ["Add Post", "Analytics","Profiles"]) # if task == "Add Post": # st.subheader("Add Your Post") # elif task == "Analytics": # st.subheader("Analytics") # elif task == "Profiles": # st.subheader("Profiles") # user_result = view_all_users() # clean_db = pd.DataFrame(user_result, columns=["username","Password"]) # st.dataframe(clean_db) # else: # st.warning("Incorrect Username/Password") # elif choice == "SignUp": # st.subheader("Create New Account") # new_user = st.text_input("Username") # new_password = st.text_input("Password", type='password') # if st.button("Signup"): # create_usertable() # add_userdata(new_user, new_password) # st.success("You have successfully created a valid Account") # st.info("Go to Login Menu to login") if __name__ == '__main__': main()