{"id":2897,"date":"2024-10-06T03:16:42","date_gmt":"2024-10-05T18:16:42","guid":{"rendered":"https:\/\/secondlife.lol\/?p=2897"},"modified":"2024-11-01T20:01:37","modified_gmt":"2024-11-01T11:01:37","slug":"youtube-video-shorts-list-extraction-with-python","status":"publish","type":"post","link":"https:\/\/secondlife.lol\/en\/youtube-video-shorts-list-extraction-with-python\/","title":{"rendered":"YouTube List Extraction: How to Automate with APIs and Python"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><a href=\"http:\/\/youtube.com\" data-type=\"link\" data-id=\"youtube.com\" target=\"_blank\" rel=\"noopener\">YouTube<\/a>to manage or analyze different content on YouTube, it is very useful to automatically extract YouTube lists. Using the YouTube Data API and Python, you can easily extract a list of shorts or general videos from a specific channel. In this article <strong>Step-by-step instructions on how to set up the API and write Python code to extract YouTube lists, including various use cases.<\/strong>Let's do it.<\/p>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title-wrap{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title-wrap{color:var(--global-palette2, #2B6CB0);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{color:var(--global-palette2, #2B6CB0);font-size:28px;font-weight:regular;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap .kb-table-of-content-list{color:var(--global-palette1, #3182CE);line-height:2em;font-weight:regular;font-style:normal;margin-top:var(--global-kb-spacing-sm, 1.5rem);margin-right:0px;margin-bottom:0px;margin-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap .kb-table-of-content-list .kb-table-of-contents__entry:hover{color:var(--global-palette6, #718096);}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);}}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{font-size:28px;}}@media all and (max-width: 767px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{font-size:28px;}}<\/style>\n\n\n<h2 class=\"wp-block-heading\">1. Preparing to extract your YouTube list<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To extract a YouTube list <strong>YouTube Data API<\/strong>is required. This API provides data on YouTube videos, channels, playlists, and more, which you can use to automatically collect the information you want.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 Issuing a YouTube Data API key<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">First, <strong>Google Cloud Platform (GCP)<\/strong>to enable the YouTube Data API and obtain an API key. Follow the steps below to set this up.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/console.cloud.google.com\/\" target=\"_blank\" rel=\"noopener\">Google Cloud Console<\/a><\/strong>Log in and create a new project (My First Project at the top of the site - NEW PROJECT - enter a project name and click CREATE)<\/li>\n\n\n\n<li>Click the top 3 lines menu on the left and go to APIs &amp; Services &gt; Library <strong>YouTube Data API v3<\/strong>and enable it (click ENABLE).<\/li>\n\n\n\n<li>In APIs and services &gt; User credentials (Credentials), click the <strong>Generate and copy your API key<\/strong>for the API key. This API key is used in your Python code to connect with the YouTube Data API.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 Verify your YouTube channel ID<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You also need the ID of the channel whose list of videos you want to extract. You can find the channel ID in the channel URL. <code>https:\/\/www.youtube.com\/channel\/UCxxxx<\/code> The string that starts with UC in the URL in the form is your channel ID. You can find it in the address bar when you click Customize channel on your YouTube channel dashboard.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. extract a list of YouTube shorts with Python<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can now extract a list of YouTube shorts in Python using the API key and channel ID you were issued. The API we'll be using is <code>youtube.search()<\/code>This API allows you to set search criteria and extract a list of shorts that match those criteria.<\/p>\n\n\n<style>.kb-image2897_89184c-f5 .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image2897_89184c-f5 img.kb-img, .kb-image2897_89184c-f5 .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image2897_89184c-f5\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"1200\" height=\"560\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-33.jpg\" alt=\"\uc1fc\uce20 \uc720\ud29c\ube0c \ub9ac\uc2a4\ud2b8 \ucd94\ucd9c \uac1c\uc694 \uadf8\ub9bc\" class=\"kb-img wp-image-2903\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-33.jpg 1200w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-33-300x140.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-33-600x280.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-33-768x358.jpg 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Python code example: Extracting a YouTube list of shorts<\/h3>\n\n\n\n<pre class=\"wp-block-code\" style=\"border-radius:5px\"><code>\nfrom googleapiclient.discovery import build\n\nEnter your # API key\n api_key = 'your_api_key'\n\nBuild the # YouTube API service\nyoutube = build('youtube', 'v3', developerKey=API_KEY)\n\n# Extract a list of shorts from a specific channel (including pagination)\ndef get_shorts_titles(channel_id, max_results=100):\n    titles = []\n    next_page_token = None\n\n    while len(titles) &lt; max_results:\n        request = youtube.search().list(\n            part=&#039;snippet&#039;,\n            channelId=channel_id,\n            maxResults=min(50, max_results - len(titles)), # 50 requests max, adjust request to fit remaining count\n            type=&#039;video&#039;,\n            videoDuration=&#039;short&#039;, # Fetch only short videos (shorts)\n            pageToken=next_page_token\n        )\n\n        response = request.execute()\n\n        Extract the title from the # result\n        titles.extend([item[&#039;snippet&#039;][&#039;title&#039;] for item in response[&#039;items&#039;]])\n\n        # Go to the next page\n        next_page_token = response.get(&#039;nextPageToken&#039;)\n\n        # Exit if there is no more next page\n        if not next_page_token:\n            break\n\n    return titles[:max_results]\n\nEnter your # channel ID\nchannel_id = &#039;YOUR_CHANNEL_ID&#039;\n\nOutput a list of # shorts titles\nshorts_titles = get_shorts_titles(channel_id, max_results=100)\nfor idx, title in enumerate(shorts_titles, 1):\n    print(f&quot;{idx}. {title}&quot;)<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Code description:<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>API connections<\/strong>Connect to the YouTube API service with the API key you were issued.<\/li>\n\n\n\n<li><strong>Add a pagination<\/strong>: <code>get_shorts_titles<\/code> In a function <code>nextPageToken<\/code>to fetch results from multiple pages. Repeat until you have fetched up to 100 results.<\/li>\n\n\n\n<li><strong>Change filter conditions<\/strong>: <code>q='Shorts'<\/code> condition so that the filtering is not too restrictive.<\/li>\n\n\n\n<li><strong>Extract and print titles<\/strong>: Saves the titles of each video as a list and prints the specified number of titles.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">When you run the code for the first time, the <code>googleapiclient <\/code>module is not installed and the error occurs. In a terminal window, type <code>pip install google-api-python-client<\/code> command to install the module.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Extract a YouTube list of videos with Python<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">YouTube now allows you to view shorts as well as regular <strong>List of videos<\/strong>can also be easily extracted using Python. When extracting a list of videos, you can also use <code>youtube.search()<\/code> API, and with different search criteria, you can extract longer videos.<\/p>\n\n\n<style>.kb-image2897_d1b9d8-aa .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image2897_d1b9d8-aa img.kb-img, .kb-image2897_d1b9d8-aa .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image2897_d1b9d8-aa\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"553\" height=\"360\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image.png\" alt=\"\ub3d9\uc601\uc0c1 \uc720\ud29c\ube0c \ub9ac\uc2a4\ud2b8 \ucd94\ucd9c \uac1c\uc694\" class=\"kb-img wp-image-2904\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image.png 553w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-300x195.png 300w\" sizes=\"(max-width: 553px) 100vw, 553px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Python code example: Extracting a list of YouTube videos<\/h3>\n\n\n\n<pre class=\"wp-block-code\" style=\"border-radius:5px\"><code>from googleapiclient.discovery import build\nfrom datetime import timedelta\n\nEnter your # API key\n api_key = 'your_api_key'\n\nBuild the # YouTube API service\nyoutube = build('youtube', 'v3', developerKey=API_KEY)\n\n# Extract a list of general videos from a specific channel\ndef get_video_titles(channel_id, max_results=100):\n    titles = []\n    next_page_token = None\n\n    while len(titles)  60: # Add only if longer than 60 seconds\n                titles.append(item['snippet']['title'])\n\n        # Go to next page\n        next_page_token = search_response.get('nextPageToken')\n        \n        # Exit if there is no more next page\n        if not next_page_token:\n            break\n\n    return titles[:max_results]\n\nFunction to convert # ISO 8601 duration to seconds\ndef parse_duration(duration):\n    parsed_duration = timedelta()\n    if 'PT' in duration:\n        time_str = duration.replace('PT', '')\n        hours = minutes = seconds = 0\n        if 'H' in time_str:\n            hours, time_str = time_str.split('H')\n            parsed_duration += timedelta(hours=int(hours))\n        if 'M' in time_str:\n            minutes, time_str = time_str.split('M')\n            parsed_duration += timedelta(minutes=int(minutes))\n        if 'S' in time_str:\n            seconds = time_str.replace('S', '')\n            parsed_duration += timedelta(seconds=int(seconds))\n    return parsed_duration.total_seconds()\n\nEnter the # channel ID\nchannel_id = 'YOUR_CHANNEL_ID'\n\nOutput a list of # generic video titles\nvideo_titles = get_video_titles(channel_id, max_results=100)\nfor idx, title in enumerate(video_titles, 1):\n    print(f\"{idx}. {title}\")\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Code description:<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Search requests<\/strong>: first <code>search().list<\/code>via <code>id<\/code>to get the IDs of all videos in that channel.<\/li>\n\n\n\n<li><strong>Check video length<\/strong>: <code>videos().list<\/code> method for each video in the <code>contentDetails<\/code>and request <code>duration<\/code>to filter only videos longer than 60 seconds.<\/li>\n\n\n\n<li><strong>Saving and printing video titles<\/strong>: Adds only videos with a length of 60 seconds or more to the list, and prints the title.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">4. YouTube List Use Cases<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This extracted list of YouTube shorts or videos can be used in a number of ways. Here are some of the most common ones<\/p>\n\n\n<style>.kb-image2897_67b4b6-a1 .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image2897_67b4b6-a1 img.kb-img, .kb-image2897_67b4b6-a1 .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image2897_67b4b6-a1\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"1200\" height=\"551\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-32.jpg\" alt=\"\uc720\ud29c\ube0c \ub9ac\uc2a4\ud2b8 \ud65c\uc6a9\uc0ac\ub840 \uadf8\ub9bc\" class=\"kb-img wp-image-2899\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-32.jpg 1200w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-32-300x138.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-32-600x276.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/image-32-768x353.jpg 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Analyze content and identify trends<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you can automatically extract and analyze a list of YouTube videos, you can quickly identify trends in your content. For example, you can analyze the top videos from a particular channel to see what topics or formats are resonating well. You can save the extracted data in Excel, or combine it with additional analytics tools for deeper analysis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 Managing marketing campaigns<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you're using YouTube to promote your brand or product, you can extract a list of your competitors' videos and analyze which ones have the most views and what keywords they use in their titles. With this information, you can strategize your campaign and benchmark the elements of successful content.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.3 Manage training content<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Creators or businesses that need to manage large amounts of video content can benefit from an extracted video list to help manage their content. The API automatically collects data like titles, descriptions, and publication dates for all your videos and organizes them in a database or spreadsheet for easy management.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.4 Create automated playlists<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can also use this method to automatically create playlists by categorizing videos uploaded to your channel. For example, you could extract only videos on a specific topic and create a playlist for that topic and update it automatically.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Organize <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"> Extracting YouTube lists using the YouTube Data API and Python can be useful for content analytics, marketing strategy, training management, and more. You can easily extract not only shorts but also regular video lists, and the data you extract can help you plan and manage your content more efficiently. You can easily manage your YouTube data through API settings and Python code! If you're new to Python, start with the <a href=\"https:\/\/secondlife.lol\/en\/vs-code-install\/\" data-type=\"post\" data-id=\"372\">Installing VS CODE - Windows<\/a> Take a look at the post to get started.<\/p>","protected":false},"excerpt":{"rendered":"<p>\uc720\ud29c\ube0c\uc5d0\uc11c \ub2e4\uc591\ud55c \ucf58\ud150\uce20\ub97c \uad00\ub9ac\ud558\uac70\ub098 \ubd84\uc11d\ud558\ub824\uba74, \uc720\ud29c\ube0c \ub9ac\uc2a4\ud2b8\ub97c \uc790\ub3d9\uc73c\ub85c \ucd94\ucd9c\ud558\ub294 \uac83\uc774&#8230;<\/p>","protected":false},"author":3,"featured_media":2906,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[3],"tags":[348,177,350,347,349,351,299],"class_list":["post-2897","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python-coding","tag-youtube-api","tag-177","tag-350","tag-347","tag-349","tag-351","tag-299"],"taxonomy_info":{"category":[{"value":3,"label":"\ud30c\uc774\uc36c(Python)"}],"post_tag":[{"value":348,"label":"YouTube API"},{"value":177,"label":"\ub370\uc774\ud130 \ubd84\uc11d"},{"value":350,"label":"\ub9c8\ucf00\ud305"},{"value":347,"label":"\uc720\ud29c\ube0c \ub9ac\uc2a4\ud2b8 \ucd94\ucd9c"},{"value":349,"label":"\uc720\ud29c\ube0c \uc1fc\uce20"},{"value":351,"label":"\ucf58\ud150\uce20 \uae30\ud68d"},{"value":299,"label":"\ud30c\uc774\uc36c \uc790\ub3d9\ud654"}]},"featured_image_src_large":["https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/10\/\uc720\ud29c\ube0c-\ub9ac\uc2a4\ud2b8-\ucd94\ucd9c-\ud3ec\uc2a4\ud2b8-\uc378\ub124\uc77c-600x600.webp",600,600,true],"author_info":{"display_name":"TERE","author_link":"https:\/\/secondlife.lol\/en\/author\/tere\/"},"comment_info":0,"category_info":[{"term_id":3,"name":"\ud30c\uc774\uc36c(Python)","slug":"python-coding","term_group":0,"term_taxonomy_id":3,"taxonomy":"category","description":"","parent":20,"count":119,"filter":"raw","cat_ID":3,"category_count":119,"category_description":"","cat_name":"\ud30c\uc774\uc36c(Python)","category_nicename":"python-coding","category_parent":20}],"tag_info":[{"term_id":348,"name":"YouTube API","slug":"youtube-api","term_group":0,"term_taxonomy_id":347,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":177,"name":"\ub370\uc774\ud130 \ubd84\uc11d","slug":"%eb%8d%b0%ec%9d%b4%ed%84%b0-%eb%b6%84%ec%84%9d","term_group":0,"term_taxonomy_id":177,"taxonomy":"post_tag","description":"","parent":0,"count":36,"filter":"raw"},{"term_id":350,"name":"\ub9c8\ucf00\ud305","slug":"%eb%a7%88%ec%bc%80%ed%8c%85","term_group":0,"term_taxonomy_id":350,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":347,"name":"\uc720\ud29c\ube0c \ub9ac\uc2a4\ud2b8 \ucd94\ucd9c","slug":"%ec%9c%a0%ed%8a%9c%eb%b8%8c-%eb%a6%ac%ec%8a%a4%ed%8a%b8-%ec%b6%94%ec%b6%9c","term_group":0,"term_taxonomy_id":348,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":349,"name":"\uc720\ud29c\ube0c \uc1fc\uce20","slug":"%ec%9c%a0%ed%8a%9c%eb%b8%8c-%ec%87%bc%ec%b8%a0","term_group":0,"term_taxonomy_id":349,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":351,"name":"\ucf58\ud150\uce20 \uae30\ud68d","slug":"%ec%bd%98%ed%85%90%ec%b8%a0-%ea%b8%b0%ed%9a%8d","term_group":0,"term_taxonomy_id":351,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":299,"name":"\ud30c\uc774\uc36c \uc790\ub3d9\ud654","slug":"%ed%8c%8c%ec%9d%b4%ec%8d%ac-%ec%9e%90%eb%8f%99%ed%99%94","term_group":0,"term_taxonomy_id":299,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts\/2897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/comments?post=2897"}],"version-history":[{"count":7,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts\/2897\/revisions"}],"predecessor-version":[{"id":3102,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts\/2897\/revisions\/3102"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/media\/2906"}],"wp:attachment":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/media?parent=2897"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/categories?post=2897"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/tags?post=2897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}