Почему код только возвращает последнюю дату в «текст» OBS? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь изменить код в фитон-скрипте для студии OBS, чтобы отображать даты наступающих событий из календаря Google. Но вывод в OBS Studio показывает только одну и ту же (последнюю) дату для каждого события. В журнале сценариев это показывается так, как должно быть ...

Пытаясь найти способ преобразовать элементы словаря в печать так, как я хотел бы показать, я наконец-то подумал, что все заработалотак, как я хотел.

Я новичок в Python и в основном только что искал ответы на вопросы, как решить, что мне нужно изменить в коде. Мне потребовались дни, чтобы узнать о datetime.datetime и о том, как strftime может работать вместе, и что мне нужно обновить Dateutil до более новой версии, чтобы не получать некоторые ошибки, которые я получил.

В любом случае, так как яЯ новичок в кодировании, и большая часть этого сценария была написана кем-то другим, мне несколько трудно понять, в чем заключается эта проблема. в журнале сценариев она работает так, как должно, но дата в «stime» становится одинаковой для каждого события, когда я отправляю его в «text» в OBS Studio.

Если кто-нибудь может помочь мне с решением этой проблемыЯ был бы очень счастлив.

# Time objects using datetime
dt_now = dt.utcnow()
now = dt.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time

#Timeformat
locale.setlocale(locale.LC_TIME, "sv_SE") # swedish
tmfmt = '%d %B,  %H:%M '


# Gets events currently happending by setting bounds to events happening within a second of current datetime
events = service.events().list(calendarId=cal_url, timeMin=now, timeMax=(dt_now+datetime.timedelta(7,1)).isoformat() +'Z',
                               maxResults=max_events, singleEvents=True, orderBy='startTime').execute()

# Logs the events to console



for event in events['items']:

    mystart = (event['start']['dateTime'])
    stime = dt.strftime(dtparse(mystart), format=tmfmt)
    print(stime)
    #print(datetime.datetime.utcnow().date())
    #print (event['start']['dateTime'])
    print(event['summary'])
    #print(dt_now("%d %b, %Y"))


# Updates the text for each event
count = 0
stream_event_happening = False
record_event_happening = False
for event in events['items']:
    if(count >= max_events):
        break
    text = stime + "\n" + event['summary']
    settings = obs.obs_data_create()
    obs.obs_data_set_string(settings, "text", text)
    source = obs.obs_get_source_by_name(source_names[count])
    obs.obs_source_update(source, settings)
    obs.obs_data_release(settings)
    obs.obs_source_release(source)

    settings2 = obs.obs_data_create()
    obs.obs_data_set_string(settings2, "file", "{}/{}.jpg".format(images_path, text))
    source2 = obs.obs_get_source_by_name(image_sources[count])
    obs.obs_source_update(source2, settings2)
    obs.obs_data_release(settings2)
    obs.obs_source_release(source2)

    count += 1

text = stime + "\ n" + event ['summary']

показывает только одну и ту же дату, но разные события ...

1 Ответ

0 голосов
/ 01 октября 2019

Ух ты, всего через несколько минут я сам нашел решение ... Я добавил:

mystart = (event['start']['dateTime'])
stime = dt.strftime(dtparse(mystart), format=tmfmt)

как раз перед:

text = stime + "\n" + event['summary']

и теперь оно работает как оноследует:)

...