Export WP Posts and Sync to Sharepoint
Long story short: old wiki is overloaded and broken; new wiki is not a wiki but SharePoint – a glorified file server; people are forced to improvise and put documentation on a WP wiki; bosses still want to see documentation in SharePoint; need a way to automatically sync new and updated posts from WP to SharePoint.
A couple of prerequisites to make this happen: the awesome wp2md
utility and the pandoc
package:
pip install git+https://github.com/dreikanter/wp2md yum -y install pandoc # Optional packages for converting to PDF yum -y install texlive-latex pdflatex texlive
The default WP behavior when exporting posts is to prepend the filename with the date. Obviously, you want to remove this date prefix if you want exported posts to overwrite older files on SharePoint. The script does that.
This process is designed to run daily from cron
and so it selects only those posts that have been created or modified in the past two days. You can adjust this as needed. You can download the script here.
#!/bin/bash # | # ___/"\___ # __________/ o \__________ # (I) (G) \___/ (O) (R) # Igor Os # igor@comradegeneral.com # 2017-11-14 configure() { this_time=$(date +'%Y-%m-%d_%H%M%S') # WP home folder wph=/opt/wp/html/wp # WP export target folder e=/opt/wp/wp_export # wp2md target folder w=/opt/wp/wp2md/${this_time} mkdir -p ${w} # Sharepoint upload URL sp_url="https://sharepoint_hsot/path/Shared%20Documents/wp/autosync" # your Sharepoint login credentials DOMAIN=COMPANY USERNAME=jdoe PASSWORD="yourP@ssw0rd" } wp_export() { wp export \ --path=${wph} \ --dir=${e}/ \ --post_type=post \ --post_status=publish \ --filename_format={site}_{date}.{n}.xml \ --start_date=$(date -d "-2 days" +'%Y-%m-%d') --end_date=$(date +'%Y-%m-%d') } convert_md() { # Convert exported XML into markdown format for i in $(find ${e} -type f -name "*\.xml"); do wp2md -url -d ${w}/ ${i} /bin/rm -f ${i} done } convert_sp() { # Convert markdown files into DOCX and HTML # Strip date from filename to make sure the new version overwrites old version on Sharepoint for i in $(find ${w} -mindepth 2 -type f -name "*\.md"); do i_new="$(echo ${i} | awk -F'/' '{print $NF}' | sed -r 's/^[0-9]{8}-//g'| sed "s/\.md$/\.md/g")" /bin/mv "${i}" "${w}/posts/${i_new}" j="$(echo ${i} | awk -F'/' '{print $NF}' | sed -r 's/^[0-9]{8}-//g'| sed 's/\.md$/\.docx/g')" k="$(echo ${i} | awk -F'/' '{print $NF}' | sed -r 's/^[0-9]{8}-//g'| sed 's/\.md$/\.html/g')" pandoc -s "${w}/posts/${i_new}" -o "${w}/posts/${k}" pandoc -s "${w}/posts/${k}" -o "${w}/posts/${j}" done } sync_sp() { # Sync files to Sharepoint for extension in md docx html; do for i in $(find ${w} -mindepth 2 -type f -name "*\.${extension}"); do j="$(echo ${i} | awk -F'/' '{print $NF}' | sed -r 's/^[0-9]{8}-//g'| sed "s/\.md$/\.${extension}/g")" curl --ntlm --user ${DOMAIN}\${USERNAME}:${PASSWORD} --upload-file "${w}/posts/${j}" "${sp_url}/${extension}/" done done } # RUNTIME configure wp_export convert_md convert_sp sync_sp