Alpha Try translate script for TMDB API actor name
#1
Hi,

I am trying to create a "language translation script" for the movie actor name from TMDB API.
This is my main code (use TMDB API, PAPAGO API-Korea Naver).

python:

import sys
import xbmcgui
import xbmcplugin
import requests
import json
import urllib.parse


def get_actors(movie_title, language):
    tmdb_api_key = 'this is my tmdb api key'
    api_key = tmdb_api_key
    base_url = 'https://api.themoviedb.org/3'
    search_url = f'{base_url}/search/movie?api_key={api_key}&query={movie_title}'
    print("search_url: ", search_url)

    # get movie ID
    response = requests.get(search_url).json()
    movie_id = response['results'][0]['id']
    print("movie_id: ", movie_id)

    # get movie actors information
    credits_url = f'{base_url}/movie/{movie_id}/credits?api_key={api_key}'
    print("credits_url: ", credits_url)
    credits = requests.get(credits_url).json()
    print("credits: ", credits)

    actors = []
    for actor in credits['cast']:
        actor_info = {
            'name': actor['name'],
            'profile_path': actor['profile_path'],
        }
        actors.append(actor_info)
        print("actor_info: ", actor_info)

    #start translate to Korea
    if language != 'en':
        client_id = 'My Naver Papago API ID'
        client_secret = 'My Naver Papago secret'
        headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
        url = 'https://openapi.naver.com/v1/papago/n2mt'
        for actor in actors:
            data = {'source': 'en', 'target': language, 'text': actor['name']}
            data = urllib.parse.urlencode(data, quote_via=urllib.parse.quote)
            headers['X-Naver-Client-Id'] = urllib.parse.quote(client_id)
            headers['X-Naver-Client-Secret'] = urllib.parse.quote(client_secret)
            response = requests.post(url, data=data, headers=headers).json()
            actor['name'] = response['message']['result']['translatedText']

    print(actors)
    return actors


if __name__ == '__main__':

    print("start main")
    movie_title = 'Dark night'
    language = 'ko'
    actors = get_actors(movie_title, language)

    for actor in actors:
        list_item = xbmcgui.ListItem(label=actor['name'].encode('utf-8'))
        list_item.setArt({
            'thumb': f'https://image.tmdb.org/t/p/w500{actor["profile_path"]}',
            'icon': f'https://image.tmdb.org/t/p/w500{actor["profile_path"]}',
        })

    print(list_item)


after install Kodistubs in pycharm, I can get below result.
Code:

start main
search_url:  https://api.themoviedb.org/3/search/movi...query=Dark night
movie_id:  373450
credits_url:  https://api.themoviedb.org/3/movie/37345...6e01295f48
credits:  {'id': 373450, 'cast': [{'adult': False, 'gender': 2, 'id': 1562952, 'known_for_department': 'Acting', 'name': 'Robert Jumper', 'original_name': 'Robert Jumper', 'popularity': 0.6, 'profile_path': '/vJXEEF3CfNzjnh08cHPmGV7HACF.jpg', 'cast_id': 1, 'character': '', 'credit_id': '5696d3c492514154d800017d', 'order': 0}, {'adult': False, 'gender': 0, 'id': 1562953, 'known_for_department': 'Acting', 'name': 'Karina Macias', 'original_name': 'Karina Macias', 'popularity': 0.6, 'profile_path': None,
...
SKIP
...
'credit_id': '5db77b4027d9cc0013148ef3', 'department': 'Production', 'job': 'Associate Producer'}]}
actor_info:  {'name': 'Robert Jumper', 'profile_path': '/vJXEEF3CfNzjnh08cHPmGV7HACF.jpg'}
actor_info:  {'name': 'Karina Macias', 'profile_path': None}
actor_info:  {'name': 'Aaron Purvis', 'profile_path': None}
actor_info:  {'name': 'Rosie Rodriguez', 'profile_path': None}
actor_info:  {'name': 'Anna Rose', 'profile_path': None}
[{'name': '로버트 점퍼', 'profile_path': '/vJXEEF3CfNzjnh08cHPmGV7HACF.jpg'}, {'name': '카리나 마키아스', 'profile_path': None}, {'name': '애런 퍼비스', 'profile_path': None}, {'name': '로지 로드리게스', 'profile_path': None}, {'name': '안나 로즈', 'profile_path': None}]
<xbmcgui.ListItem object at 0x000001FA767A2BB0>


At last one, I think I can get actor information correctly.
xml:

[{'name': '로버트 점퍼', 'profile_path': '/vJXEEF3CfNzjnh08cHPmGV7HACF.jpg'}, {'name': '카리나 마키아스', 'profile_path': None}, {'name': '애런 퍼비스', 'profile_path': None}, {'name': '로지 로드리게스', 'profile_path': None}, {'name': '안나 로즈', 'profile_path': None}]
So, base on this code, I made add on as below
script.kmTranlate
├── plugin.py
├── addon.xml
└── resources

Here is addon.xml
xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="script.kmTranlate" name="KM" version="0.0.1" provider-name="KM">
    <requires>
        <import addon="xbmc.python" version="3.0.0"/>
        <import addon="script.module.requests" version="2.22.0" />
    </requires>
    <extension point="xbmc.python.script" library="plugin.py"/>
    <extension point="xbmc.addon.metadata">
        <summary lang="en_GB">KM Translate</summary>
        <description lang="en_GB">>KM Translate</description>
        <platform>all</platform>
        <license>GPL-2.0-only</license>
    </extension>
</addon>
that is what I have done and install my script into the Kodi 20.0. Then, for the skin part, I place my script like this
xml:

<control type="list" id="903">
     <itemlayout height="240" width="180">
        <control type="label">
            <label>$INFO[ListItem.Label]</label> // I exepct actor's name for selected movie
        </control>
    </itemlayout>
     <focusedlayout height="240" width="180">
        <control type="label">
            <label>$INFO[ListItem.Label]</label> // I exepct actor's name for selected movie
        </control>
    </focusedlayout>
    <content>$VAR[myscript]</content>
xml:

<variable name="myscript">
    <value>plugin://script.kmTranlate="IDONTKNOW"</value>
</variable>

My Question
#1 plugin.py
Is it fine below syntax to return to Kodi list_item?
python:

 for actor in actors:
        list_item = xbmcgui.ListItem(label=actor['name'].encode('utf-8'))
        list_item.setArt({
            'thumb': f'https://image.tmdb.org/t/p/w500{actor["profile_path"]}',
            'icon': f'https://image.tmdb.org/t/p/w500{actor["profile_path"]}',
        })


#2 skin xml part
I don't know how to give a parameter to get actor's name ("IDONTKNOW")
xml:

<variable name="myscript">
    <value>plugin://script.kmTranlate="IDONTKNOW"</value>
</variable>
Reply

Logout Mark Read Team Forum Stats Members Help
Try translate script for TMDB API actor name0