kopia lustrzana https://github.com/dgtlmoon/changedetection.io
				
				
				
			
		
			
	
	
		
			98 wiersze
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
		
		
			
		
	
	
			98 wiersze
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
| 
								 | 
							
								# Creating Plugins for changedetection.io
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This document describes how to create plugins for changedetection.io. Plugins can be used to extend the functionality of the application in various ways.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Plugin Types
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### UI Stats Tab Plugins
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								These plugins can add content to the Stats tab in the Edit page. This is useful for adding custom statistics or visualizations about a watch.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Creating a UI Stats Tab Plugin
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1. Create a Python file in a directory that will be loaded by the plugin system.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								2. Use the `global_hookimpl` decorator to implement the `ui_edit_stats_extras` hook:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```python
							 | 
						||
| 
								 | 
							
								import pluggy
							 | 
						||
| 
								 | 
							
								from loguru import logger
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								global_hookimpl = pluggy.HookimplMarker("changedetectionio")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@global_hookimpl
							 | 
						||
| 
								 | 
							
								def ui_edit_stats_extras(watch):
							 | 
						||
| 
								 | 
							
								    """Add custom content to the stats tab"""
							 | 
						||
| 
								 | 
							
								    # Calculate or retrieve your stats
							 | 
						||
| 
								 | 
							
								    my_stat = calculate_something(watch)
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    # Return HTML content as a string
							 | 
						||
| 
								 | 
							
								    html = f"""
							 | 
						||
| 
								 | 
							
								    <div class="my-plugin-stats">
							 | 
						||
| 
								 | 
							
								        <h4>My Plugin Statistics</h4>
							 | 
						||
| 
								 | 
							
								        <p>My statistic: {my_stat}</p>
							 | 
						||
| 
								 | 
							
								    </div>
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    return html
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								3. The HTML you return will be included in the Stats tab.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Plugin Loading
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Plugins can be loaded from:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1. Built-in plugin directories in the codebase
							 | 
						||
| 
								 | 
							
								2. External packages using setuptools entry points
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To add a new plugin directory, modify the `plugin_dirs` dictionary in `pluggy_interface.py`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Example Plugin
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Here's a simple example of a plugin that adds a word count statistic to the Stats tab:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```python
							 | 
						||
| 
								 | 
							
								import pluggy
							 | 
						||
| 
								 | 
							
								from loguru import logger
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								global_hookimpl = pluggy.HookimplMarker("changedetectionio")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def count_words_in_history(watch):
							 | 
						||
| 
								 | 
							
								    """Count words in the latest snapshot"""
							 | 
						||
| 
								 | 
							
								    try:
							 | 
						||
| 
								 | 
							
								        if not watch.history.keys():
							 | 
						||
| 
								 | 
							
								            return 0
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								        latest_key = list(watch.history.keys())[-1]
							 | 
						||
| 
								 | 
							
								        latest_content = watch.get_history_snapshot(latest_key)
							 | 
						||
| 
								 | 
							
								        return len(latest_content.split())
							 | 
						||
| 
								 | 
							
								    except Exception as e:
							 | 
						||
| 
								 | 
							
								        logger.error(f"Error counting words: {str(e)}")
							 | 
						||
| 
								 | 
							
								        return 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@global_hookimpl
							 | 
						||
| 
								 | 
							
								def ui_edit_stats_extras(watch):
							 | 
						||
| 
								 | 
							
								    """Add word count to the Stats tab"""
							 | 
						||
| 
								 | 
							
								    word_count = count_words_in_history(watch)
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    html = f"""
							 | 
						||
| 
								 | 
							
								    <div class="word-count-stats">
							 | 
						||
| 
								 | 
							
								        <h4>Content Analysis</h4>
							 | 
						||
| 
								 | 
							
								        <table class="pure-table">
							 | 
						||
| 
								 | 
							
								            <tbody>
							 | 
						||
| 
								 | 
							
								                <tr>
							 | 
						||
| 
								 | 
							
								                    <td>Word count (latest snapshot)</td>
							 | 
						||
| 
								 | 
							
								                    <td>{word_count}</td>
							 | 
						||
| 
								 | 
							
								                </tr>
							 | 
						||
| 
								 | 
							
								            </tbody>
							 | 
						||
| 
								 | 
							
								        </table>
							 | 
						||
| 
								 | 
							
								    </div>
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    return html
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Testing Your Plugin
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1. Place your plugin in one of the directories scanned by the plugin system
							 | 
						||
| 
								 | 
							
								2. Restart changedetection.io
							 | 
						||
| 
								 | 
							
								3. Go to the Edit page of a watch and check the Stats tab to see your content
							 |