We are looking to remove/disable a macros on our instance of confluence, but we need to run a check to see if any pages are using the plugin to preclude their media from breaking? Can one query the Confluence DB for occurrences of a macros on any pages within Confluence?
You can use the search to find out if a macro was inserted on one or more pages. An example: If you like to know if the multiexcerpt or multiexcerpt-include macro has been used in your Confluence, type macroName:multi* in the Search field, and hit Enter.
Yes, I tried macroName:widget* and it worked.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hey, Ian.
You can do this via the XMLRPC
Here is a example written in python finding all pages with a instance of the thumbnail macro (ac:thumbnail)
Once complete all links containing said macro are written to a errors.json file.
#!/usr/bin/env python
import xmlrpclib
import json
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
def disable(self):
self.HEADER = ''
self.OKBLUE = ''
self.OKGREEN = ''
self.WARNING = ''
self.FAIL = ''
self.ENDC = ''
#Confluence XML-RPC info
url = 'http://localhost:1990/rpc/xmlrpc'
client = xmlrpclib.Server(url, verbose=0);
authToken = client.confluence2.login("admin", "admin");
spaces = client.confluence2.getSpaces(authToken);
# Error stack
errors = []
# Macro definition we're looking for
macro = "ac:thumbnail"
for space in spaces:
print ("Parsing space: " + space['name']);
spacePages = client.confluence2.getPages(authToken,space['key'])
for spacePage in spacePages:
print ("- Parsing page: " + spacePage['title']);
# get the page in question with content
page = client.confluence2.getPage(authToken, spacePage["id"])
# did we find the macro definition?
if(page["content"].find(macro) > 0):
print ("{0}Found {1} macro!{2}".format(bcolors.WARNING, macro, bcolors.ENDC))
errors.append(spacePage["url"])
# print the errors
for error in errors:
print error["url"]
#store the errors
with open('errors.json', 'w') as outfile:
json.dump([errors], outfile)
client.confluence2.logout(authToken)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
To view the macro handle, go to a page containing the macro and click Tools->View Storage format
You should now see something like this:
<ac:structured-macro ac:name="tip">
where tip is the macro handle. Try this with the answer by Evelin
Or simply update the lines
# Macro definition we're looking for macro = 'ac:structured-macro ac:name="tip"'
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
The macro handle for Widget Connector is simply :)
ac:structured-macro ac:name="widget"
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.