test-streamlit / app.py
Shungo's picture
Upload app.py
d93c305
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()