https:\/\/pro.arcgis.com\/en\/pro-app\/tool-reference\/server\/upload-service-definition.htm<\/A> を使うように変換しました。偶然にもサービスパラメータを制御するオプションが大幅に増えています。 <\/P>免責事項:私はpythonについて何も知らないので、ここには様々な非効率があると思いますが、動作しています。 <\/P>
<\/P>
<\/P>
import<\/><\/> arcpy
import<\/><\/> sys<\/><\/>, string<\/><\/>, os<\/><\/>, calendar<\/><\/>, datetime<\/><\/>, traceback<\/><\/>,smtplib
from<\/><\/> arcpy import<\/><\/> env
from<\/><\/> subprocess import<\/><\/> call
# メールサーバー設定<\/><\/>
service =<\/><\/> "GRSM_SASQUATCH"<\/><\/>
sd_filename =<\/><\/> service +<\/><\/> ".sd"<\/><\/>
try<\/><\/>:<\/><\/>
d =<\/><\/> datetime.<\/><\/>datetime.<\/><\/>now(<\/><\/>)
log =<\/><\/> open(<\/><\/> "C:\\\PYTHON_LOGS\\LOG."<\/><\/> +<\/><\/> service +<\/><\/> ".txt"<\/><\/>, "a")
log.write("----------------------------" + "\\n")
log.write("----------------------------" + "\\n")
log.write("ログ: " + str(d) + "\\n")
log.write("\\n")
# プロセス開始...</>
starttime = datetime.datetime.now()
log.write("プロセス開始:\n")
log.write(" プロセス開始時刻 " + str(starttime) + "\\n")
log.write("\\n")
# メールサーバー設定
SERVER = "1.2.34"
PORT = "25"
FROM = "sasquatch@big.foot.com"
MAILDOMAIN = '@big.foot.com'
# データ管理者がメールを受け取ります。@big.foot.comなしで彼らのメールアドレスである必要があります...
userList=["yeti"]
# ListUsersから返される名前付きタプルのリストからユーザー名リストを取得します
userNames = [u for u in userList]
# userNamesリストから適切なサフィックスを付けてメールアドレスを作成します。
emailList = [name + MAILDOMAIN for name in userNames]
TO = emailList
# メールの日付取得
DATE = d
# ポータルへのサインイン
arcpy.SignInToPortal('https://www.arcgis.com', 'userid', 'password')
# 出力ファイル名の設定
outdir = r"C:\PRODUCTION\GRSM_SASQUATCH"
sddraft_filename = service + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
# 失敗した前回の実行から残ったSDファイルを削除
try:
os.remove(sd_filename)
print("正常に削除しました", sd_filename)
except:
print("エラー ファイルを削除中 "<\/SPAN>, sd_filename, ", 存在しない可能性があります"<\/SPAN>)<\/SPAN>
try:
os.remove(sddraft_output_filename)
print("正常に削除されました ", sddraft_output_filename)
except:
print("ファイル削除中にエラーが発生しました ", sddraft_output_filename, ", 存在しない可能性があります")
# 公開するリファレンスマップ
aprx = arcpy.mp.ArcGISProject(r"C:\PRODUCTION\GRSM_SASQUATCH\GRSM_SASQUATCH.aprx")
m = aprx.listMaps("GRSM_SASQUATCH_LOCATIONS")[0]
# FeatureSharingDraftを作成し、サービスのプロパティを設定する
# https://pro.arcgis.com/en/pro-app/arcpy/sharing/featuresharingdraft-class.htm
sharing_draft = m.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", service)<\/SPANTOKEN>
sharing_draft.summary = "Sasquatch Locations"<\/SPANTOKEN>
sharing_draft.tags = "Sasquatch, Fur, Hairy, Big Foot"<\/SPANTOKEN>
sharing_draft.description = "Hide and Seek Champion"<\/SPANTOKEN>
sharing_draft.credits = "Yeti"<\/SPANTOKEN>
sharing_draft.useLimitations = "This is not real"<\/SPANTOKEN>
#sharing_draft.portalFolder = "Front Country"<\/SPANTOKEN>
sharing_draft.overwriteExistingService = "true"<\/SPANTOKEN>
sharing_draft.allowExporting = "true"<\/SPANTOKEN>
# サービス定義ドラフトファイルを作成する<\/SPANTOKEN>
sharing_draft.exportToSDDraft(sddraft_output_filename)
# サービスのステージング<\/SPANTOKEN>
# https://pro.arcgis.com/en/pro-app/tool-reference/server/stage-service.htm<\/SPANTOKEN>
sd_output_filename = os.path.join(outdir, sd_filename)<\/SPANTOKEN>
arcpy.StageService_server(sddraft_output_filename, sd_output_filename)
# ポータルに共有する<\/SPANTOKEN>
# https://pro.arcgis.com/en/pro-app/tool-reference/server/upload-service-definition.htm<\/SPANTOKEN>
print("サービス定義をアップロードしています..." )
arcpy.UploadServiceDefinition_server(sd_output_filename,
"My Hosted Services",
"",
"",
"EXISTING",
"existingFolder",
"",
"OVERRIDE_DEFINITION",
"SHARE_ONLINE",
"PUBLIC",
"SHARE_ORGANIZATION",
["GRSM","Great Smoky Mountains National Park Open Data"] )
# SDファイルのクリーンアップ<\/SPANTOKEN>
try:
os.remove(sd_filename)
print("正常に削除されました ", sd_filename)
except:
print("ファイル削除中にエラーが発生しました ", sd_filename, ", 存在しない可能性があります")
try:
os.remove(sddraft_output_filename)
print("正常に削除されました ", sddraft_output_filename)
except:
print("ファイル削除中にエラーが発生しました ", sddraft_output_filename, ", 存在しない可能性があります")
# 成功した場合はログに何も書き込まない。<\/SPANTOKEN>
endtime = datetime.datetime.now()
log.write(" 正常に完了しました 所要時間: "
+ str(endtime - starttime) + "\n")
log.write("\n")
log.close()
print('完了')
except token">:<\/SPAN>
# トレースバックオブジェクトを取得する <\/SPAN>
tb =<\/SPAN> sys.<\/SPAN>exc_info(<\/SPAN>)<\/SPAN>[<\/SPAN>2<\/SPAN>]<\/SPAN>
tbinfo =<\/SPAN> traceback.<\/SPAN>format_tb(<\/SPAN>tb)<\/SPAN>[<\/SPAN>0<\/SPAN>]<\/SPAN>
# エラーに関する情報をメッセージ文字列に連結する <\/SPAN>
pymsg =<\/SPAN> "PYTHON ERRORS:\nTraceback info:\n"<\/SPAN> +<\/SPAN> tbinfo +<\/SPAN> "\nError Info:\n"<\/SPAN> +<\/SPAN> str(<\/SPAN>sys.<\/SPAN>exc_info(<\/SPAN>)<\/SPAN>[<\/SPAN>1<\/Span>]<\/span>\n msgs =<\/span> \"ArcPy ERRORS:\n\"<\/span> +<\/span> arcpy.<\/span>GetMessages(<\/span>2<\/span>)<\/span> +<\/span> "\n"<\/span>
# スクリプトツールまたはPythonウィンドウで使用するためにPythonエラーメッセージを返す <\/span>
arcpy.<\/span>AddError(<\/span>pymsg)<\/span>
arcpy.<\/span>AddError(<\/span>msgs)<\/span>
# Python / Pythonウィンドウで使用するためにPythonエラーメッセージを出力する <\/span>
log.<\/span>write(<\/span>""<\/span> +<\/span> pymsg +<\/span> "\n"<\/span>)<\/span>
log.<\/span>write(<\/span>""<\/span> +<\/span> msgs +<\/span> ""<\/span>)<\/span>
log.<\/span>close(<\/span># 何か問題が発生した場合のメールメッセージを定義する
SUBJECT = "Notification of Un-Successful AGOL Update of "+service
MSG = "Did Not Update: {} - ID: {} at "+ str) + "; " + pymsg + "; " + msgs
print(MSG)
print(emailList)
# スチュワードに成功したアーカイブの通知メールを送信する
#MESSAGE = "\\ From: %s To: %s Subject: %s %s" % (FROM, ", ".join(TO), SUBJECT, MSG)
MESSAGE = "Subject: %s\\n\\n%s" % (SUBJECT, MSG)
try:
try:
print("サーバーに接続しています...")
server = smtplib.SMTP(SERVER,PORT)
try:
print("ログイン中...")
try:
print("メール送信中...")
server.sendmail(FROM, TO, MESSAGE)
except Exception as e:
print("メール送信エラー\\n" + e.message)
except Exception as e:
print("認証サーバーエラー:資格情報を確認してください \n" + e.message)
except Exception as e:
print("サーバーへの接続エラー:サーバーのURLと通信ポート(25およびデフォルト)を確認してください \n" + e.message)
print("終了します。")
server.quit()
except Exception as e:
print(e.message)
</SpAN...