Jump to content

Search the Community

Showing results for tags 'scripting'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Announcements
    • Emby Premiere Purchase/Subscription Support
    • Feature Requests
    • Tutorials and Guides
  • Emby Server
    • General/Windows
    • Android Server
    • Asustor
    • FreeBSD
    • Linux
    • NetGear ReadyNAS
    • MacOS
    • QNAP
    • Synology
    • TerraMaster NAS
    • Thecus
    • Western Digital
    • DLNA
    • Live TV
  • Emby Apps
    • Amazon Alexa
    • Android Mobile
    • Android TV / Fire TV
    • Emby Theater
    • iOS
    • Apple TV
    • Kodi
    • Raspberry Pi
    • Roku
    • Samsung Smart TV
    • Sony PlayStation
    • LG Smart TV
    • Web App
    • Windows Media Center
    • Plugins
  • Language-specific support
    • Arabic
    • Dutch
    • French
    • German
    • Italian
    • Portuguese
    • Russian
    • Spanish
    • Swedish
  • Community Contributions
    • Ember for Emby
    • Fan Art & Videos
    • Tools and Utilities
    • Web App CSS
  • Other
    • General Discussion
    • Developer API
    • Hardware
    • Media Clubs
    • Legacy Support

Blogs

  • Emby Blog

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Found 4 results

  1. Hi guys, I just thought I'd introduce the latest feature of Emby Scripter-X (v2.3.5+) out now on the catalog. Emby Scripter-X Webhooks Why? I notice that a lot of Scripter-X users use the plugin to perform some type of webhook(s) based on certain events, so why not natively support it? So how does it work? Pretty much as-per-usual with the Actions interface. The interface will eventually change input field labels based on the selection in the interpreter box, but it is as above: Run [script], where [script] is the URL of your webhook script (webhook endpoint/api endpoint, etc), in my example above, I have a php script running on my local webserver at http://192.168.1.10/hook.php. [interpreter] should be set to web:post (to post data), web:get is also available, however it does exactly that - doesn't post data. [Parameters] instead of listing parameters to send over the command-line, this is the path to your json content template - where your data is formatted from. Here I specify d:\embyscripts\hooktemplates\authenticationfailed.json, and in this file is the following content: { "user": { "username": "%username%", "password": "%password%" }, "device": { "id": "%device.id%", "name": "%device.name%", "ip_address": "%device.remote.ipaddress%" }, "scripterx_version": "%scripterx.version%", "emby_server_version": "%server.version%" } It should be self explanatory from here. So ScripterX will read in your template, substitute for the token values, and post it to the specified URL. So my PHP script simply takes $_POST['data'], casts it as a JSON object, and outputs to a file on my webserver: Array ( [user] => Array ( [username] => Anthony [password] => asdfasdfasdffasgfsasgasdfasdf ) [device] => Array ( [id] => 427a7309-5fc2-489d-9a83-0664c619c779 [name] => Firefox [ip_address] => 192.168.1.124 ) [scripterx_version] => 2.3.4.0 [emby_server_version] => 4.4.2.0 But as you can see --- these templates are entirely customisable, so you can adjust these templates to suit whatever you're posting your data to. The only thing currently that I haven't made customisable is the POST variable that contains the json data, which is set to 'data'. I will eventually extend the functionality such that the JSON data can be submitted without the need for POST variables. Any comments/feedback/suggestions are greatly appreciated as always.
  2. Anthony Musgrove

    New Plugin - Custom Scripting | Emby ScripterX

    Good evening all, I am extremely happy to present to you - Emby Scripter-X version 3.0 (up on the catalog now!) The major change in this version is -- Packages -- ! This gives you the opportunity to develop packages for Scripter X for others to install and use. And very soon, there will be a Packages catalog available that you'll be able to search for, and install community packages, straight from your Emby Administration Console. A package is written in Javascript. A Package requires 3 things - 1) a PackageInfo.json file, 2) a Package.js file, and 3) both these files zipped up together in a .ZIP file. PackageInfo.json provides vital information about your package to ScripterX. It's format is as follows :- { "Id": "scripterx.package.example", "Name": "Example Package", "Description": "An example package for the ScripterX package system.", "Author": "Anthony Musgrove", "Email": "anthony@emby-scripterx.info" } Package.js is the javascript file for your package - where all your code exists. This is the fun bit. Some important things to know about your script: - When your package is initialised by ScripterX (on installation, and on server startup), a function in your Package.js is executed. It is called _package_init(): function _package_init() { //do something here on package startup } - Your script can subscribe to ANY of the ScripterX events, by adding a function with the name _EventName, for example, if you wish to subscribe your package to the onAuthenticationFailed event, you'd simply enter: function _onAuthenticationFailed(context) { //do something here when someone fails to authenticate to emby. } *** Note, the parameter for these functions is context, which is the context of the event call. It contains all the information regarding token values, etc, that you have full access to. For example, to get the username of the attempted failed authentication, you could use :- function _onAuthenticationFailed(context) { var attempted_username = context.Token("%username%").value; } - Same goes for any of the other events, events being: onAuthenticationFailed, onAuthenticationSuccess, onLibraryScanComplete, onMediaItemAdded, onMediaItemRemoved, onMediaItemUpdated, onPlaybackStart, onPlaybackStopped, onScheduledTask, onSessionEnded, onSessionStarted, onCameraImageUploaded, onLiveTVRecordingStart, onLiveTVRecordingEnded, onScheduledTaskStart, onScheduledTaskEnded, onMediaItemAddedComplete, onPlaybackProgress - To log output from your package to the Emby server log, you can utilise the ScripterX.Log functions, they are :- ScripterX.Log.Info("Add an Info log entry to emby server log."); ScripterX.Log.Error("Add an Error log entry to emby server log."); - If you need timers, ScripterX has timers. You can simply create, delete, start, restart or stop a timer by using the following Timers commands : Create a timer that only elapses once, but can be restarted manually after its elapsed, by using .createOnce: ScripterX.Timers.createOnce("myTimer", 5000, "tmrMyTimer_Elapsed", null); or, create a timer that elapses every interval, without having to be restarted, by using .createRepeating: ScripterX.Timers.createRepeating("myRepeatingTimer", 10000, "tmrMyRepeatingTimer_Elapsed", null); - When your timer elapses, it will call the function set in as your callback. For example, when my timer elapses, it will call the following function: function tmrMyTimer_Elapsed(timer_name, timer_interval, objects) { //do something here when my timer elapses, the timer's name is given here too. //timer name is needed to start, stop, restart, delete etc. } - ScripterX supports webhook posts right from your javascript, you can perform a webhook post by using the ScripterX.Web functions, for example, in my _onPlaybackStart function, I want to post to a webhook every time someone starts playing a movie or TV show on my server, I can do this by: function _onPlaybackStart(context) { /* Send a webhook when (someone) plays (something) */ var api_url = "https://myapi.url.com"; var playback_info = {}; playback_info.itemId = context.Token("%item.id%").value; playback_info.itemName = context.Token("%item.name%").value; playback_info.userName = context.Token("%username%").value; playback_info.deviceName = context.Token("%device.name%").value; playback_info.serverName = context.Token("%server.name%").value; playback_info.memo = playback_info.userName + " is playing " + playback_info.itemName + " on device " + playback_info.deviceName + " from server " + playback_info.serverName; ScripterX.Web.Post(api_url, JSON.stringify(playback_info)); } - Once you've created your Package zip file for distribution, you can install it on your Emby server by using the Emby Scripter-X package installer interface, as shown below: - While you're testing your package, you don't have to keep uninstalling and reinstalling your package to test and debug. Simply install your package ONCE, then navigate to your Emby data directory, find ScripterX, then find Packages, then find the folder labelled with your package's assigned installationId. Inside this directory, you'll notice Package.js. Make changes directly to this file, then go back into your Emby administration panel and click the 'Reload' icon next to your package listed in your 'Installed Packages' panel. The reload icon is next to the uninstall/delete icon. If you wish to uninstall a package, simply click the trashbin, then confirm by clicking 'Really Uninstall?' There is MUCH, MUCH more to come, but for now this will get people going. There are other function groups that I am going to implement including Library searching and Item manipulation, User manipulation and searching, among many, many other functionality. Please enjoy, and as always, any comments, feedback, suggestions are MUCH MUCH appreciated. Emby ScripterX (github: https://github.com/AnthonyMusgrove/Emby-ScripterX) Project/Product Website: https://www.emby-scripterx.info/ Version v2.3.4 now up on the Emby Plugin Catalog & GitHub with changes. Events supported: On Authentication Failed, On Authentication Success, On Playback Start, On Playback Stopped, On Session Started, On Session Ended, On Media Item Added, On Media Item Updated, On Media Item Removed, on Scripter-X Scheduled Task, on Library Scan Completed, On Camera Image Uploaded, on Live TV Recording Start, on Live TV Recording Ended, onScheduledTaskStart, onScheduledTaskEnded, onPlaybackProgress, onMediaItemAddedComplete For tokens available, please see GitHub readme, or check out the Actions interface in the plugin - you can find the plugin in the Emby Server Catalog, under 'General'. ChangeLog Changes for 2.3.4: Major core rewrite Added conditions (drag and drop) Rewrote token parser and added contexts Added event onPlaybackProgress (which supports transcoding detection) Added event onMediaItemAddedComplete which is called virtually, after an onMediaItemAdded + Meta Data (or timeout of 40 seconds, whichever comes first) Added IP address tokens for Authentication events Various other modifications and changes Changes for 2.3.1: %item.library.name%, %item.library.type% issue resolved Added confirmation on delete for actions (theme friendly) Remove 'Global Tokens' section in Actions interface (they're listed now for each event) Changes for 2.3.0: Variables are now case-insensitive, refactoring a lot of the interface code (Prototype-to-production), cleaning interface, addressed various GitHub issues. Changes for 2.2.9: Progressively from v2.2.6, functionality to enable or disable events individually, many more tokens (please see GitHub tokens list or the Actions interface), global tokens (server version, uptime, etc), more item tokens (for example, season number, episode number, item meta (imdb id, tmdb id, whatever you wish), season meta, series meta, plus plenty more! Changes for 2.2.5: Aesthetics on Actions Interface (enlarged textboxes for script and interpreter, better alignment of add buttons) Changes for 2.2.4: Progessively from v2.2.0 to v2.2.4, integration with a sortable library, actions user interface customisation and remembering custom order within browser local storage. Changes for 2.2.0: Now theme friendly and compatible, changes with theme selection correctly. Changes for 2.1.9: Redesign Events/Actions interface for less clutter Please ignore the 'Advanced' tab, It won't be there in the next catalog release, its just used for debug at this stage. Changes for 2.1.7, 2.1.6, 2.1.5, 2.1.4: Progressive changes to implement Live TV Recording Events. 'Emby Scripter-X DVR Manager' was implemented in the codebase to handle all Live TV events, tokens and logging. Changes for 2.1.3: Addressed bug with %item.library.*% tokens with respect to onItemRemoved event. (see https://github.com/AnthonyMusgrove/Emby-ScripterX/issues/2 for info!) Changes for 2.1.2: Added new event - onCameraImageUploaded. This event is triggered when a user uploads an image to the Emby Server via the 'Camera Upload' functionality within the various Emby Apps. Tokens supported are as above. Below is an image of the event on the Actions page, along with an image of a sample batch script and output: Changes for 2.1.1: Actions now utilises the entire available interface space; so editing and viewing are much easier. Some input validation added for Interpreter and Script Some cosmetic modifications :- on adding new action, delete/trash button is now changed to 'X' so it indicates 'remove this unsaved action'. Once a new action is saved, the 'X' icon will change to a 'trash/delete' icon, signifying 'delete this action from the server'. Changes for 2.1.0: Bug fix for " in script name, parameters, interpreter. various other bugs, interface bug fixes very stable at this stage. Changes for 2.0.0: Redesign Interfaces, add Actions interface, Community interface (as tabs) Redesign core Allow multiple script actions for each event Changes for 1.0.0.8 - Various updates/changes: Addressed issues with having to supply entire path to interpreter. Implemented better way to detect OS platform (IsWindows() IsLinux() IsOSX()) Powershell.exe, cmd.exe, /bin/bash or a custom executable is now supported Examples now: using powershell.exe as interpreter: -File "D:\embyscripts\ScripterX-test.ps1" -Name %item.name% -ID %item.id% -Type %item.type% -LibName %item.library.name% using cmd.exe as interpreter: /s /c D:\embyscripts\test.bat AuthFail %username% %user.id% %device.id% %device.name% using /bin/bash /home/medius/scripts/test.sh AuthOK %username% Changes for 1.0.0.7: on Library Scan Completed : D:\embyscripts\test.bat Library Scan Complete! Library Scan Complete! Changes for 1.0.0.6: %item.update.reason% : Media Item Updated "1917" "D:\Media\Movies\1917.2019.1080p.BluRay.x264.AAC5.1-[YTS.MX] - Copy.mp4" (Update Reason: MetadataEdit) ‪D:\embyscripts\test.bat Media Item Updated "%item.name%" "%item.path%" (Update Reason: %item.update.reason%) 1.0.0.5 additions: %series.id%, %series.name%, %season.id%, %season.name% : PlaybackStart ItemID: 593 - Name: "Brian: Portrait of a Dog" - Path: "D:\Media\TV\Family Guy\S01\S01E07 - Brian - Portrait Of A Dog.avi" - Username: Anthony - DeviceName: Firefox - ItemType: item type: Episode - LibraryName: TV - LibraryContentType: tvshows (seriesname: Family Guy) (season: Season 1) ‪D:\embyscripts\test.bat PlaybackStart ItemID: %item.id% - Name: "%item.name%" - Path: "%item.path%" - Username: %username% - DeviceName: %device.name% - ItemType: item type: %item.type% - LibraryName: %item.library.name% - LibraryContentType: %item.library.type% (seriesname: %series.name%) (season: %season.name%) README is on Github. Comments/Feedback/Suggestions are GREATLY appreciated. On Scheduled Task: A field now exists to specify a script to run as a scheduled task - you'll now see under 'Scheduled Tasks -> Application' an Emby ScripterX Scheduled Task. No tokens are yet available to this field - need feedback/suggestions/comments on what should be available to specify as parameters/tokens.
  3. For anyone like me who started off creating their library of media and and deciding at a later date that maybe they want to move the those movies into their own folders, but don't want to manually create thousands of folders, and then manually move the files, you can automate that process with PowerShell (on WIndows). Open up a PowerShell prompt and navigate to the directory with your movies being stored, in my case on a network share. cd \\unraid\media\movies Make sure this command will create a folder for every file in the directory you just navigated to. WARNING, I was lazy when I made this. This will technically create a folder for any object in the folder that has a period in the name. So, if for whatever reason, you already have folders with a period in the name, it will try to create a folder for it as well. If you already have a folder structure with periods, either don't use this or revise the command. Get-ChildItem | Where-Object {$_.Name -Like "*.*"} | Select BaseName | ForEach-Object {New-Item -Name $_.BaseName -ItemType "Directory"} This next command will actually move every item with a period in the name, into a folder of the same name, minus the file extension. So, if you have multiple copies of a movie, with multiple resolutions, or if you keep your metadata in NFO files, ALL of those files will be moved into the same folder. Get-ChildItem | Where-Object {$_.Name -Like "*.*"} | ForEach-Object {Move-Item $_.Name $_.BaseName}
  4. Don't you hate having your nice library ruined by a stray episode with the title "Episode XX" or "TBA" because that data wasn't available at the time it was scanned in? Well I may have a solution that uses python, emby api, and scripter-x to collect these episodes and automatically refresh their metadata until an actual title is found. Check it out here https://github.com/stummyhurt/noTBA-scripterx
×
×
  • Create New...