#!/opt/local/bin/python # # The main site needs friendly links of the form: # http://mpp.org/CA/ -> http://ca.mpp.org # http://ca.mpp.org/news/ # http://mpp.org/CA/news/ -> http://ca.mpp.org/news/ # http://mpp.org/CA/news.html -> http://ca.mpp.org/news/ # import MultipartPostHandler import urllib, urllib2 import cookielib import getpass import os, stat, sys import re, time import datetime, time import url_utils kinteraUsername = "wholcombmpp" minDate = datetime.date(2005, 11, 1) try: password = os.environ['KINTERAPASS'] except KeyError: password = getpass.getpass("(KINTERAPASS) Kintera Password: ") URI = "https://www.kintera.com" LOGINURI = "%s/KINTERA_Sphere/login/asp/login.asp?use=yes" % URI NEWSITEURI = "%s/kintera_sphere/comm/cms_website/websiteEditMisc.asp?action=submit" % URI cookies = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies), MultipartPostHandler.MultipartPostHandler) print "Logging into Kintera as: %s" % kinteraUsername params = {"LoginName" : kinteraUsername, "Password" : password } url_utils.getPage(LOGINURI, params).read() CMSSURI = "%s/kintera_sphere/comm/cms_website/cmsWebsiteList.aspx" % (URI) params = url_utils.getParams(url_utils.getPage(CMSSURI, params).read()) params["_ctl0:LR1:Pgr"] = "500" page = url_utils.getPage(CMSSURI, params).read() # vmpp.org CMSIDRE = re.compile("]+>(.*?)", re.IGNORECASE) cmsIds = {} for cms in CMSIDRE.findall(page): cmsIds[cms[1]] = cms[0] # copied from cms list javascript ACID = "8nJKJQPlEeKWE" CIDRE = re.compile("cid={(.*?)}") # Primary Navigation SITELISTURI = "%s/kintera_cms/welcome/start.asp?acid=%s&wsid=%s" % (URI, ACID, cmsIds["Marijuana Policy Project"]) mainCID = CIDRE.search(url_utils.getPage(SITELISTURI).read()).group(1) ARCHIVEIDRE = re.compile("fShowMoveToFolderDialog\([^,]+, *'([^']+)'.*?Archive") COVERIDRE = re.compile("fShowMoveToFolderDialog\([^,]+, *'([^']+)'.*?Cover") for key, cmsId in cmsIds.items(): if key.find("MPP: ") == 0 and not key.find("MPP: Alabama") == 0: print "Processing: %s" % key SITELISTURI = "%s/kintera_cms/welcome/start.asp?acid=%s&wsid=%s" % (URI, ACID, cmsId) CID = CIDRE.search(url_utils.getPage(SITELISTURI).read()).group(1) NEWLINKURI = "%s/kintera_cms/apps/s/link.asp?cid={%s}&bin_pagetype_id=6" % (URI, CID) params = url_utils.getParams(url_utils.getPage(NEWLINKURI).read()) params["bin_title"] = "News Link" PARENTSELURI = "%s/kintera_cms/pp/ppselect2.asp?cid={%s}&move=2" % (URI, CID) params["bin_location"] = ARCHIVEIDRE.search(url_utils.getPage(PARENTSELURI).read()).group(1) ITEMSURI = "%s/kintera_cms/pp/ppselect.asp?cid={%s}&opener_bin_id=bin_linkpp" % (URI, CID) itemsParams = url_utils.getParams(url_utils.getPage(ITEMSURI).read(), "docForm2") itemsParams["search_bin_name"] = "More News" itemsParams = url_utils.getParams(url_utils.getPage(ITEMSURI, itemsParams).read()) params["use_link"] = "1" params["bin_linkpp"] = itemsParams["action_bin_id"].split("}")[0] + "}" params["createbtn"] = "1" params["formvalidate"] = "1" NEWLINKURI = "%s/kintera_cms/apps/s/link.asp" % (URI) url_utils.getPage(NEWLINKURI, params) print " Creating /news/ link to bin id %s" % params["bin_linkpp"] # the link has to be created before it can be edited to add the friendly url SITELISTURI = "%s/kintera_cms/pp/pplist.asp?cid={%s}" % (URI, CID) page = url_utils.getPage(SITELISTURI).read() BINIDRE = re.compile("(.*?)", re.IGNORECASE) binIds = {} for item in BINIDRE.findall(page): binIds[item[1]] = item[0] LINKEDITURI = "%s/kintera_cms/apps/s/link.asp?cid={%s}&bin_id={%s}&tabpage=Advanced" % (URI, CID, binIds["News Link"]) linkParams = url_utils.getParams(url_utils.getPage(LINKEDITURI).read()) FRIENDLYURI = "%s/kintera_cms/pp/editfriendlyurl.asp?cid={%s}&bin_id={%s}" % (URI, CID, binIds["News Link"]) params = url_utils.getParams(url_utils.getPage(FRIENDLYURI).read()) DOMAINRE = re.compile("^http://(..).*$") abbreviation = DOMAINRE.sub("\\1", linkParams["bin_url"]) params['domain'] = abbreviation params['dirName'] = "news/" params['content_nowysiwyg'] = "1" params['cnt_pubnow'] = "1" params['formvalidate'] = "1" params['okbtn'] = "1" site = "%s.mpp.org" % abbreviation print " Masking http://%s/news/ => %s" % (site, linkParams["bin_url"]) url_utils.getPage(FRIENDLYURI, params) NEWLINKURI = "%s/kintera_cms/apps/s/link.asp?cid={%s}&bin_pagetype_id=6" % (URI, mainCID) params = url_utils.getParams(url_utils.getPage(NEWLINKURI).read()) params["bin_title"] = "%s Link" % site PARENTSELURI = "%s/kintera_cms/pp/ppselect2.asp?cid={%s}&move=2" % (URI, CID) params["bin_location"] = COVERIDRE.search(url_utils.getPage(PARENTSELURI).read()).group(1) params["use_link"] = "" params["bin_link"] = "http://%s" % site params["createbtn"] = "1" params['cnt_pubnow'] = "1" params["formvalidate"] = "1" NEWLINKURI = "%s/kintera_cms/apps/s/link.asp" % (URI) url_utils.getPage(NEWLINKURI, params) print " Creating new link to %s" % site params["bin_title"] = "%s/news/ Link" % site params["bin_link"] = "http://%s/news/" % site url_utils.getPage(NEWLINKURI, params) print " Creating new link to %s/news/" % site SITELISTURI = "%s/kintera_cms/pp/pplist.asp?cid={%s}" % (URI, mainCID) page = url_utils.getPage(SITELISTURI).read() binIds = {} for item in BINIDRE.findall(page): binIds[item[1]] = item[0] FRIENDLYURI = "%s/kintera_cms/pp/editfriendlyurl.asp?cid={%s}&bin_id={%s}" % (URI, mainCID, binIds["%s Link" % site]) params = url_utils.getParams(url_utils.getPage(FRIENDLYURI).read()) params['domain'] = "www" params['dirName'] = "%s/" % abbreviation.upper() params['content_nowysiwyg'] = "1" params['cnt_pubnow'] = "1" params['formvalidate'] = "1" params['okbtn'] = "1" print " Masking http://www.mpp.org/%s/ => %s" % (abbreviation.upper(), linkParams["bin_url"]) url_utils.getPage(FRIENDLYURI, params) FRIENDLYURI = "%s/kintera_cms/pp/editfriendlyurl.asp?cid={%s}&bin_id={%s}" % (URI, mainCID, binIds["%s/news/ Link" % site]) params = url_utils.getParams(url_utils.getPage(FRIENDLYURI).read()) params['domain'] = "www" params['dirName'] = "%s/news/" % abbreviation.upper() params['content_nowysiwyg'] = "1" params['cnt_pubnow'] = "1" params['formvalidate'] = "1" params['okbtn'] = "1" print " Masking http://www.mpp.org/%s/news/ => %s" % (abbreviation.upper(), linkParams["bin_url"]) url_utils.getPage(FRIENDLYURI, params)