ãã®ã·ãªãŒãºã®æåã®èšäºã§ã¯ ã1CãŸãã¯å¥ã®ã·ã¹ãã ãŸãã¯ããã°ã©ã ã§çæãããXMLãã¡ã€ã«ãååŸããæšæºãããã³ã«ã䜿çšããŠBitrixã«è»¢éããå¥ã®ã¹ã¯ãªããã䜿çšããå¯èœæ§ãå®èšŒããŸãã
ãã®èšäºã§ã¯ãã¹ã¯ãªããã®åè¡ã«è©³çŽ°ãªã³ã¡ã³ããä»ããŸãã ããã«ãããããŒãºãžã®å€æŽãç°¡åã«ãªããŸãã
ãã®ã¹ã¯ãªããã¯BASHã§èšè¿°ãããŠããã1C-Bitrixã1Cããã«ã¿ãã°è£œåã転éããBitrix管çã·ã¹ãã ã«åºã¥ããŠæ§ç¯ããããµã€ããã泚æãããŠã³ããŒãããããã«æäŸããã®ãšåãæšæºãéããŠç°ãªã亀æãæäŸããããã€ãã®ã¹ã¯ãªããã®1ã€ã§ãã
次ã¯ã³ã¡ã³ãä»ãã®ã¹ã¯ãªããã®ããã¹ãã§ãã æä»çãªã³ãŒããå«ãã¹ã¯ãªããã®ç°¡åãªãã¥ãŒã¯ã åã®èšäºã§èª¬æãããŠãããbitrexchangeãããžã§ã¯ãã®githubã§å ¥æã§ããŸãã
ã¹ã¯ãªãããšããŒã«ã«ãã¡ã€ã«ã®èšå®
空ãŸãã¯ç Žæãããã¡ã€ã«ãéä¿¡ãããã®ãé²ãããšã©ãŒãçºçããå Žåã®ããŒã¿ç Žæãé²ãããã«ãã¹ã¯ãªãããçµäºããŸãã
set -e
çŸåšã®å®å šãªãã¹ãå€æ°ã«ä¿åããªãããããã¯çŸåšã®ãã£ã¬ã¯ããªãžã®éåžžã«èå³æ·±ã移åã§ã
cd $(dirname $0) cdir=$(pwd)"/"
éåžžã1Cã¯ãã¡ã€ã«ããããã¯ãŒã¯äžã®ãµãŒããŒäžã®å ±æãã©ã«ããŒã«ã¢ããããŒãããŸããããã¯äºåã«ããŠã³ãããŸãã ããããããã¯ããªãã®ããã®ããŒã«ã«ãã£ã¬ã¯ããªã§ããããããã¯ãŒã¯äžã§ããªãã«ãã£ãŠå ±æãããŸã
remote_dir="/mnt/localwinserver_fs/import/webdata/"
xmlãã¡ã€ã«ãããã¯ãããzipãã¡ã€ã«ã®ååã 代ããã«ãäžæçãªååã®ã¿ã䜿çšã§ããŸãã ãã ãããã®ãããªããŒãã³ãŒãããããã¡ã€ã«åã¯ã以åã«è»¢éããããã¡ã€ã«ã®ã³ããŒãä¿åããããã«äœ¿çšãããŸãã ããã¯éåžžã«äŸ¿å©ã§ãããã€ãã©ã®è£œåãã©ã®æ¥ã«ç»å Žããã©ã®äŸ¡æ Œã§è¡šç€ºãããããªã©ã確èªã§ããŸãã
zip_fname="catalogue.zip"
転éãããã¡ã€ã«ã®ååã ãããã®ãã¡ã€ã«ã¯1Cã«ãã£ãŠåœ¢æãããéåžžã¯ãã®ãããªååãæã£ãŠããŸãããä»ã«ããããããããŸããïŒ ããããã§ãã¯ã¢ãŠãããå¿ èŠããããŸãïŒ ãã¡ã€ã«ã¯ã¹ããŒã¹ä»ãã§ãªã¹ããããŸãã
xml_files="import0_1.xml offers0_1.xml"
ãšã©ãŒã¡ãã»ãŒãžãéä¿¡ããã管çè ã®ã¡ãŒã«ã
email1="admin@yourinternetshop.com"; email2="alert@yourinternetshop.com";
çŸåšã®æå»ã決å®ããŸãã
ctime=$(date +%Y-%m-%d-%H%M)
ãã¡ã€ã«ã®ç¢ºèªãšæºå
ãã®ã¹ã¯ãªããã¯ãå€ãã®çš®é¡ã®ããŠã³ããŒããã¹ãŠã®ç¹æ®ãªã±ãŒã¹ã§ãã çŸåšå®è¡äžã®ã«ã¿ãã°ãã¢ã³ããŒãããããšã«å ããŠãå¥ã®ã¹ã¯ãªãããããä»ã®äº€æããããŸãã ãã ãããã®ã¢ã³ããŒãã®ãã¬ãŒã ã¯ãŒã¯å -ã«ã¿ãã°ã®ã¢ã³ããŒãã2ã€ã®ã¿ã€ããå®çŸ©ãããŠããŸããããããå¢åã¢ã³ããŒããã€ãŸãå€æŽã®ã¢ã³ããŒããšå®å šãªã¢ã³ããŒãã§ãã 圢åŒã§ã¯ã1ã€ã®ãã©ã¡ãŒã¿ãŒã®ã¿ãäºãã«ç°ãªããŸãïŒå±æ§ã®å€
-ããã¯trueãŸãã¯falseã§ãã XMLãã¡ã€ã«ã®å 容ã«ã€ããŠèšãã°ãã€ã³ã¯ãªã¡ã³ã¿ã«ã¢ã³ããŒãã«ã¯å®å šãªè£œåã»ãããå«ããããšãã§ããŸãããéãã¯ç°ãªããŸããBitrixãå®å šãªã¢ã³ããŒããåãåããšãæ¢åã®ååã«ã¿ãã°å šäœãå®å šã«æ¶å»ããåã³å å¡«ããŸãã ååã®ç»åããã¹ãŠå€±ããããããå®å šãªã¢ããããŒãã«ã¯å¿ ããã¹ãŠã®ç»åãå«ãŸããŸãããå¢åã¢ã³ããŒãã«ã¯å«ãŸããªãå ŽåããããŸãã ãã¡ãããäœæãããã€ã³ãã£ã³ã°ããµã€ãã®ããŒã¿ããŒã¹ã«ä¿æããããšãéèŠãªå Žåã¯ãæ¢åã®ãã£ã¬ã¯ããªãåé€ããªãããšããå§ãããŸãã äžè¬ã«ãäœããã®æ¹æ³ã§ã䜿çšããã¢ã³ããŒãã®ã¿ã€ããšå®çŸ©ãã倧ããªéãããããŸãã ãããã£ãŠã1Cã決ããŠä¿¡é Œããªãã§ããã®ã¢ã³ããŒããå®éã«å¢åã§ããããšã確èªããŠãã ãããããã«ãäž¡æ¹ã®ãã¡ã€ã«ããã§ãã¯ã€ã³ããŸãã åæã«ããããã®ãã¡ã€ã«ããŸã£ããååšããããšãããã³2ã€ã®ãã¡ã€ã«ãããããšã確èªããŸãã ããšãã°ãäœããã®çç±ã§1Cã補åç¯å²ã®ã¿ãã¢ã³ããŒãããå ŽåããããããŒã«ãèœäžããŠãã¡ã€ã«ããŸã£ããã¢ããããŒããããªãããšããããŸãã ãããã£ãŠãåé¡ãçºçããå Žåã¯ããã®ããšãèªåã§éç¥ããŠçµäºããŸãã
chan=$(grep -e "=\"true" ${remote_dir}*.xml | wc -l) if test "$chan" != "2"; then echo "Error: XMLs are not in 'changes only' mode or file(s) are missing" mail -s " " -a "From: bitrexchange <${email1}>" $email1,$email2 <<< " ." exit 1 else echo "OK: Format of XMLs are 'changes only'" fi
äœæ¥èªäœãéå§ããŸãããã¡ã€ã«ãããã¯ãã以åã®ãã¡ã€ã«ã®ã¢ãŒã«ã€ããçŸåšã®æ¥ä»ã«ããŸãã ãã®ã³ãã³ãã¯ããã¹ãŠã®xmlãã¡ã€ã«ããã£ã¬ã¯ããªã«ããã¯ããããšã«æ³šæããŠãã ããã
if [ -f $zip_fname ]; then mv $zip_fname "${zip_fname}.${ctime}"; fi /usr/bin/zip -9j "$zip_fname" ${remote_dir}*.xml
HTTPãªã¯ãšã¹ãèšå®
HTTPãªã¯ãšã¹ãã®ããããŒãèšå®ããŸãã å®éãããã¯ã第äžã«ãå®å šã«ãªãã·ã§ã³ã§ããã第äºã«ããŠãŒã¶ãŒãšãŒãžã§ã³ããªã©ãç¬èªã®äžéšãèšå®ã§ããŸããããã«ãããåä¿¡åŽã®Apacheãã°ã§ãããã®ãªã¯ãšã¹ãããã£ããã§ããŸãã
headers="--header=\"User-Agent: 1C+Enterprise/8.2\" --header=\"Accept-Encoding: deflate\""
ãã°ã€ã³ãããŒãããããŠãŒã¶ãŒã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã ããã¯éåžž1c_importãŸãã¯importã§ãã ãã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã¯ãBitrixã³ã³ãããŒã«ããã«ã§èšå®ãããŸãïŒ ãã¹ãã«ã¯ã管çè ã¢ã«ãŠã³ãadminã䜿çšã§ããŸãã
login="import" password="yourpasswordonbitrix"
ã¹ã¯ãªãããç ©éã«ããªãããã«ããã¹ãŠã®ãªã¯ãšã¹ãã®ããŒã¹URLãåå¥ã®å€æ°ã«å ¥ããŸãã ããã¯éåžžã ãã¡ã€ã³/ bitrix / admin / 1c_exchange.phpã§ã
baseurl="http://yourinternetshop.com/bitrix/admin/1c_exchange.php"
å®éã®äº€æ
ææžã¯éåžžã«ïŒïŒïŒè¡šé¢çã§ããããããã³ã«ã®äœ¿çšæ¹æ³ã¯1Cæ§æãšã¯ç°ãªãããã䜿çšããã亀ææ¹æ³ã¯å®éšçã«æ€èšŒããã³ç¢ºèªãããããã€ãã®äœæ¥ãããžã§ã¯ãã§å€æŽãªãã§æ©èœãã倧é䜿çšã®å¯èœæ§ã確èªããŸãã
亀æãããã³ã«ã«ããã°ãããã€ãã®ã¿ã€ãã®ãªã¯ãšã¹ããé çªã«éä¿¡ãããŸãã ãªã¯ãšã¹ãã®ã¿ã€ãã¯ãããŒã¹URLã«è¿œå ããããã©ã¡ãŒã¿ãŒã«ãã£ãŠæ±ºãŸããŸãããã®ãã©ã¡ãŒã¿ãŒã¯ãæ¢ã«ããŒã¹URLãšããŠèšå®ããŠããŸãã URLã®2ã€ã®å€æ°ã¯ããªã¯ãšã¹ãã®ã¿ã€ããæå®ããŸãã æåã®ã¿ã€ãã¯ã販売ãŸãã¯ã«ã¿ãã°ã®ããããã§ãã å°ãªããšãæåã®ãªã¯ãšã¹ãã§ãããå€æŽããåžžã«ã«ã¿ãã°ã䜿çšããããšãã§ããŸãã 2çªç®ã¯ãå€æ°ã¢ãŒãã§äº€æã®æ®µéã決å®ãããããç§ãã¡ã«ãšã£ãŠããéèŠã§ãã
æåã®ãªã¯ãšã¹ããã¢ãŒã= checkauth
2çªç®ã®èŠæ±ãmode = init
3çªç®ã®èŠæ±ãmode = file + POST zip fileã
åŸç¶ã®ãªã¯ãšã¹ããã¢ãŒã=ã€ã³ããŒã
æåã®ãªã¯ãšã¹ã
HTTPèªèšŒã䜿çšããŠãã°ã€ã³ããŸãïŒ éåžžããã®ã¡ãœããã¯bitrixã«å«ãŸããŠããŸãããå«ãŸããŠããªãå Žåã¯ãµãŒããŒèšå®ã確èªããŠãã ããã ç§ã®ç¥ãéããbitrixã§ãã®ã¡ãœãããæå¹ãŸãã¯ç¡å¹ã«ããèšå®ã¯ãããŸããããå€ãã®æ¹æ³ã§ããã°ã©ã ã§èªèšŒããªãã«ããããšãã§ããŸãã ãããããããã¢ã¯ãã£ããªé²åŸ¡ããå¹²æžããå¯èœæ§ããããŸãããã°ã€ã³ã§ããªãå Žåã¯ããã¹ãäžã¯ç¡å¹ã«ããŠã¿ãŠãã ããã
ret_line=$( wget $headers --user=${login} --password=${password} --auth-no-challenge -O - -q "${baseurl}?type=sale&mode=checkauth" ) read -a ret_ar <<< $ret_line
ãããã³ã«ã«ãããšããã°ã€ã³ãæåããå ŽåãBitrixã¯HTTPå¿çã®æ¬æã«3è¡ã®åœ¢åŒã§å¿çãè¿ããŸãã
æåã¯æååã®æåã§ã
2çªç®ã¯ã»ãã·ã§ã³å€æ°ã§ãéåžžã¯PHPSESSIDã§ã
第äž-ã»ãã·ã§ã³å€ãæååã
susseccãåä¿¡ããå Žåã¯ãã»ãã·ã§ã³å€æ°ãšãã®å€ãä¿åããŠãå°æ¥äœ¿çšã§ããããã«ããŸããä¿åããªãå Žåã¯ãã¹ã¯ãªãããçµäºããŸãã ãã®æç¹ã§ãšã©ãŒãçºçããå Žåãäœããã®æ¹æ³ã§ä¿åããã³è¡šç€ºã§ããHTMLããŒãžãååŸã§ããŸããã»ãšãã©ã®å Žåããã°ã€ã³ãå¿ èŠã§ãããšããã¡ãã»ãŒãžã衚瀺ãããŸãã ãã®æ®µé-ã»ãšãã©ã®å Žå-ãŠãŒã¶ãŒã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã確èªãããŸãããã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã®äžã§Bitrixã³ã³ãããŒã«ããã«ã«ç§»åããŸãã
if [ ${ret_ar[0]} != "success" ]; then echo "Login error\r\n"; exit -1; fi sessvar=${ret_ar[1]} sessid=${ret_ar[2]} echo sessid=$sessid
2åç®ã®ãªã¯ãšã¹ã
2çªç®ã®èŠæ±ã¯Initã§ãã ãã®ãªã¯ãšã¹ããåä¿¡ãããšããã£ã¬ã¯ããª/ upload / 1c_catalog /ã¯å®å šã«ã¯ãªã¢ãããŸãïŒïŒïŒåã®ããŠã³ããŒãããã®ããŒã¿ãå¿ èŠãªå Žåã¯æ³šæããŠãã ããã ããšãã°ãååã®åçã転éããããšãéèŠã§ãã 1CããŒãžã§ã³8.3ã¯çºèŠããããããäœããã®çç±ã§ãã®èŠæ±ã¯éä¿¡ããããããã«ãã¡ã€ã«èŠæ±ã«é²ã¿ãŸãã ãã®æ®µéã§ãšã©ãŒãçºçããå¯èœæ§ããããŸããããã«ã€ããŠã¯ä»é²ã§èª¬æããŸãããšã©ãŒã®å¯èœæ§ãåç §ããŠãã ããïŒ1ïŒã
ret=$(wget $headers --header="Cookie: ${sessvar}=${sessid}" -O - -q "${baseurl}?type=catalog&mode=init"); echo $ret
3çªç®ã®ãªã¯ãšã¹ã
3çªç®ã®èŠæ±ã§ã¯ãPOSTèŠæ±ãšãšãã«zipãã¡ã€ã«ã転éããå¿ èŠããããŸãã mode = fileã§ããå¿ èŠããããŸããããã¡ã€ã«å-ãã©ã¡ãŒã¿ãã¡ã€ã«å-ç§ãç解ããããã«ããªã¯ãšã¹ãã«ã¯ã©ãã«ã衚瀺ããããéä¿¡ãããããŒã¿ããã¡ã€ã«ãšããŠä¿åãããååã®ã¿ãèšå®ããããïŒãã¡ã€ã«ã¯POSTãªã¯ãšã¹ãã§ãããããå®éã«ã¯HTTPã®ã³ã³ããã¹ãã§ã¯ãããã¯ãã¡ã€ã«ã§ã¯ãªããåãªãããŒã¿ã®äžéšã«ãããŸããïŒã
ãã®ã¹ãããã§ã¯ãupload / 1c_catalogãã£ã¬ã¯ããªãŒã«ã解åãããimport.zipãã¡ã€ã«ããããŸãã èå³æ·±ãããšã«ããã以äžã®è¿œå ãªã¯ãšã¹ãã¯å¿ èŠãããŸããã æåã®ã€ã³ããŒãèŠæ±ããããšããã«ãèªèº«ã解åããŸãã
ret=$(wget $headers --post-file ${zip_fname} --header="Cookie: ${sessvar}=${sessid}" -O - -q "${baseurl}?type=catalog&mode=file&filename=import.zip"); echo $ret
ã€ã³ããŒããªã¯ãšã¹ã
ããã«ã1C-Bitrix亀æãããã³ã«ã«ããã°ãæåæååãåä¿¡ããããŸã§ãmode = fileã§ãªã¯ãšã¹ããéä¿¡ããå¿ èŠããããŸãã å®éãæåã§ã¯ãªãããšã確èªããå¿ èŠããããŸãããåãªã¯ãšã¹ãã«é²æå¿çããããããããã°ãã€ã³ããŒããç¶è¡ã§ããŸããäœãä»ã®ãã®ãæ¥ãå Žåãäœããã®çç±ã§ã€ã³ããŒããçµäºããŸããããã¶ãæåã ææžåãããŠããªãå€ãã®ãã€ã³ãã®1ã€ã¯ããã®ãããªãªã¯ãšã¹ããµã€ã¯ã«ãå±éããããã¡ã€ã«ããšã«ç¹°ãè¿ãå¿ èŠããããzipãã¡ã€ã«ã®ååã¯ä»ã®å Žæã§æå®ããå¿ èŠããªãããšã§ãã ä»é²ã®ãšã©ãŒïŒ2ïŒãåç §ããŠãã ããã
for fname in $xml_files; do st="progress"; while [ "$st" = "progress" ]; do ret=$(wget $headers --header="Cookie: ${sessvar}=${sessid}" -O - -q "${baseurl}?type=catalog&mode=import&filename=${fname}"); st=$( <<< "$ret" head -n1 | cut -c1-8); echo "$ret" | iconv -f cp1251 -t utf-8 done done
ãã®ãµã€ã¯ã«ã®åŸãæåŸã®ã¡ãã»ãŒãž=æåã§ããããšã確èªããå¿ èŠããããŸããããã§ãªãå Žåã¯ãå床èªåèªèº«ã«éç¥ããŸãã ããã¯ããã®ã¹ã¯ãªããã®ãã¬ãŒã ã¯ãŒã¯å ã§ããŸãã¯ä»ã®æ¹æ³ïŒãã°ã®ç¢ºèªãªã©ïŒã§å®è¡ã§ããŸãã
æåŸã®ãªã¯ãšã¹ã
ããã¥ã¡ã³ãã«ãããšãæåŸã®èŠæ±ã¯type = successã§ããå¿ èŠãããã1Cã¯ãã®èŠæ±ãéä¿¡ããŸããããã®ã¹ã¯ãªããã¯ãããäžèŠã«ããŸãã
ã¢ããªã±ãŒã·ã§ã³ïŒ
èãããããšã©ãŒïŒ1ïŒ
2çªç®ã®èŠæ±ã§ã¯ããšã©ãŒã倱æããã¹ããŒãããŸãã ã³ã³ããŒãã³ãã¯ããšã©ãŒãšãšãã«ã倱æããšããåèªãè¿ãããã®åŸã«ãšã©ãŒã®èª¬æãç¶ããŸãã ããããã©ããããèŠæ±æã«èšèªãå€å¥ã§ããªãããããšã©ãŒã詳现ã«èšè¿°ããã«å€±æãè¿ãã ãã§ãã äœããã®çš®é¡ã®ããã©ã«ãèšèªãå¿ èŠã§ããã ãããããã®çç±ã¯ä»ã®äœããããããŸããããäºå®ã¯å€±æãäžããããããããã¹ãŠã ãšããããšã§ãã ãšã©ãŒã®åå ãç¹å®ã§ããŸããã ãã€ãã®ããã«ãã³ãŒãã«å¿ã³èŸŒãããšã§è§£æ±ºããŸãã
COption::GetOptionString("sale", "secure_1c_exchange", "N") == "Y"
ã³ãŒãã§ãã®ãã©ã¡ãŒã¿ãŒã®æ€èšŒãçŽæ¥ç¡å¹ã«ã§ããŸããNã«èšå®ã§ããŸãã
èšå®-ããŒã«-PHPã³ãã³ãã©ã€ã³ã
COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y" ); COption::SetOptionString("sale", "secure_1c_exchange", "N" );
èãããããšã©ãŒïŒ2ïŒ
éèªæãªééãïŒå段éã§2è¡ã衚瀺ãããŸãã1è¡ç®ã¯é²è¡ç¶æ³ã§ã2è¡ç®ã¯äœãè¡ãããŠãããã®èª¬æã§ãã ã§ããããééããªãããã°ã¬ã¹ãããã¯ãå¿ èŠã§ãã YYYYYã¢ã€ãã ã®XXXXãåŠçããŸããã
-ããã§ã¯ããéåžžã«å€ãã®èŠçŽ ã®éåžžã«å€ããåŠçããŸãã-ããã¯ã€ã³ããŒãã§ãã ããã§ãªãå Žåãã€ã³ããŒãã¯è¡ãããŸããã ãã®ãããªå Žåã¯ãç¹å®ã®æ§æã§ããã
1C-BitrixããBASHãžã®æšæºäº€æïŒ äžé£ã®åºçç©ã®æåã®èšäº ã