mirror of
https://github.com/Sarsoo/Spotify.NET.git
synced 2024-12-23 06:36:26 +00:00
Deploy website - based on c97a93a984
This commit is contained in:
parent
af4402be57
commit
5f07598fb8
1
031dc046.3010d1aa.js
Normal file
1
031dc046.3010d1aa.js
Normal file
File diff suppressed because one or more lines are too long
1
0951e901.f78795c5.js
Normal file
1
0951e901.f78795c5.js
Normal file
File diff suppressed because one or more lines are too long
2
1.b01500b4.js
Normal file
2
1.b01500b4.js
Normal file
File diff suppressed because one or more lines are too long
5
1.b01500b4.js.LICENSE.txt
Normal file
5
1.b01500b4.js.LICENSE.txt
Normal file
@ -0,0 +1,5 @@
|
||||
/*!
|
||||
Copyright (c) 2017 Jed Watson.
|
||||
Licensed under the MIT License (MIT), see
|
||||
http://jedwatson.github.io/classnames
|
||||
*/
|
1
10f76bbd.13b7a611.js
Normal file
1
10f76bbd.13b7a611.js
Normal file
File diff suppressed because one or more lines are too long
1
15560a88.6e2ad090.js
Normal file
1
15560a88.6e2ad090.js
Normal file
File diff suppressed because one or more lines are too long
1
17896441.3d06f9cd.js
Normal file
1
17896441.3d06f9cd.js
Normal file
File diff suppressed because one or more lines are too long
1
18116e9d.fb5bea49.js
Normal file
1
18116e9d.fb5bea49.js
Normal file
File diff suppressed because one or more lines are too long
1
1aaf601c.d933b003.js
Normal file
1
1aaf601c.d933b003.js
Normal file
File diff suppressed because one or more lines are too long
1
1be78505.0f577e0c.js
Normal file
1
1be78505.0f577e0c.js
Normal file
File diff suppressed because one or more lines are too long
1
1f220079.4a9deec3.js
Normal file
1
1f220079.4a9deec3.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{110:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return o})),n.d(t,"metadata",(function(){return c})),n.d(t,"rightToc",(function(){return l})),n.d(t,"default",(function(){return p}));var r=n(2),i=n(6),a=(n(0),n(151)),o={id:"utilities",title:"Utilities",sidebar_label:"Utilities"},c={id:"version-5.1.1/web/utilities",title:"Utilities",description:"Paging-Methods",source:"@site/versioned_docs/version-5.1.1/web/utilities.md",permalink:"/docs/web/utilities",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/versioned_docs/version-5.1.1/web/utilities.md",version:"5.1.1",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1589387236,sidebar_label:"Utilities",sidebar:"version-5.1.1/someSidebar",previous:{title:"Tracks",permalink:"/docs/web/tracks"},next:{title:"Getting Started",permalink:"/docs/auth/getting_started"}},l=[{value:"Paging-Methods",id:"paging-methods",children:[]}],s={rightToc:l};function p(e){var t=e.components,n=Object(i.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("h2",{id:"paging-methods"},"Paging-Methods"),Object(a.b)("p",null,"The ",Object(a.b)("inlineCode",{parentName:"p"},"SpotifyWebAPI")," features two paging-helper Methods, ",Object(a.b)("inlineCode",{parentName:"p"},"GetNextPage(Paging<T> page)")," and ",Object(a.b)("inlineCode",{parentName:"p"},"GetPreviousPage(Paging<T> page)"),".\nBoth are an easy way to receive the next/previous page of a Paging-Object."),Object(a.b)("p",null,"Sample:"),Object(a.b)("pre",null,Object(a.b)("code",Object(r.a)({parentName:"pre"},{className:"language-csharp"}),'var playlistTracks = _spotify.GetPlaylistTracks("1122095781", "4EcNf2l8rXInbJOf3tQdgU", "", 50);\nwhile (true)\n{\n Console.WriteLine(playlistTracks.Items.Count);\n if (!playlistTracks.HasNextPage())\n break;\n playlistTracks = _spotify.GetNextPage(playlistTracks);\n}\n')))}p.isMDXComponent=!0},151:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return f}));var r=n(0),i=n.n(r);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=i.a.createContext({}),p=function(e){var t=i.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},u=function(e){var t=p(e.components);return i.a.createElement(s.Provider,{value:t},e.children)},b={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,o=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=r,f=u["".concat(o,".").concat(d)]||u[d]||b[d]||a;return n?i.a.createElement(f,c({ref:t},s,{components:n})):i.a.createElement(f,c({ref:t},s))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:r,o[1]=c;for(var s=2;s<a;s++)o[s]=n[s];return i.a.createElement.apply(null,o)}return i.a.createElement.apply(null,n)}d.displayName="MDXCreateElement"}}]);
|
1
2.6eaf9d11.js
Normal file
1
2.6eaf9d11.js
Normal file
File diff suppressed because one or more lines are too long
1
20ac7829.057f084f.js
Normal file
1
20ac7829.057f084f.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{111:function(e){e.exports=JSON.parse('{"docsSidebars":{"version-5.1.1/someSidebar":[{"type":"category","label":"SpotifyAPI-NET","items":[{"type":"link","label":"Home","href":"/docs/home"}]},{"type":"category","label":"SpotifyAPI-NET.Web","items":[{"type":"link","label":"Getting Started","href":"/docs/web/getting_started"},{"type":"link","label":"Albums","href":"/docs/web/albums"},{"type":"link","label":"Artists","href":"/docs/web/artists"},{"type":"link","label":"Browse","href":"/docs/web/browse"},{"type":"link","label":"Follow","href":"/docs/web/follow"},{"type":"link","label":"Library","href":"/docs/web/library"},{"type":"link","label":"Personalization","href":"/docs/web/personalization"},{"type":"link","label":"Player","href":"/docs/web/player"},{"type":"link","label":"Playlists","href":"/docs/web/playlists"},{"type":"link","label":"Profiles","href":"/docs/web/profiles"},{"type":"link","label":"Proxy Settings","href":"/docs/web/proxy"},{"type":"link","label":"Search","href":"/docs/web/search"},{"type":"link","label":"Tracks","href":"/docs/web/tracks"},{"type":"link","label":"Utilities","href":"/docs/web/utilities"}]},{"type":"category","label":"SpotifyAPI-NET.Auth","items":[{"type":"link","label":"Getting Started","href":"/docs/auth/getting_started"},{"type":"link","label":"Implicit Grant","href":"/docs/auth/implicit_grant"},{"type":"link","label":"Authorization Code","href":"/docs/auth/authorization_code"},{"type":"link","label":"Client Credentials","href":"/docs/auth/client_credentials"},{"type":"link","label":"Token Swap","href":"/docs/auth/token_swap"}]}]},"permalinkToSidebar":{"/docs/auth/authorization_code":"version-5.1.1/someSidebar","/docs/auth/client_credentials":"version-5.1.1/someSidebar","/docs/auth/getting_started":"version-5.1.1/someSidebar","/docs/auth/implicit_grant":"version-5.1.1/someSidebar","/docs/auth/token_swap":"version-5.1.1/someSidebar","/docs/home":"version-5.1.1/someSidebar","/docs/web/albums":"version-5.1.1/someSidebar","/docs/web/artists":"version-5.1.1/someSidebar","/docs/web/browse":"version-5.1.1/someSidebar","/docs/web/follow":"version-5.1.1/someSidebar","/docs/web/getting_started":"version-5.1.1/someSidebar","/docs/web/library":"version-5.1.1/someSidebar","/docs/web/personalization":"version-5.1.1/someSidebar","/docs/web/player":"version-5.1.1/someSidebar","/docs/web/playlists":"version-5.1.1/someSidebar","/docs/web/profiles":"version-5.1.1/someSidebar","/docs/web/proxy":"version-5.1.1/someSidebar","/docs/web/search":"version-5.1.1/someSidebar","/docs/web/tracks":"version-5.1.1/someSidebar","/docs/web/utilities":"version-5.1.1/someSidebar"},"version":"5.1.1"}')}}]);
|
1
22a09cbf.2dc06596.js
Normal file
1
22a09cbf.2dc06596.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{112:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return c})),n.d(t,"rightToc",(function(){return p})),n.d(t,"default",(function(){return l}));var r=n(2),a=n(6),o=(n(0),n(151)),i={id:"implicit_grant",title:"Implicit Grant",sidebar_label:"Implicit Grant"},c={id:"version-5.1.1/auth/implicit_grant",title:"Implicit Grant",description:"This way is recommended and the only auth-process which does not need a server-side exchange of keys. With this approach, you directly get a Token object after the user authed your application.",source:"@site/versioned_docs/version-5.1.1/auth/implicit_grant.md",permalink:"/docs/auth/implicit_grant",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/versioned_docs/version-5.1.1/auth/implicit_grant.md",version:"5.1.1",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1589387236,sidebar_label:"Implicit Grant",sidebar:"version-5.1.1/someSidebar",previous:{title:"Getting Started",permalink:"/docs/auth/getting_started"},next:{title:"Authorization Code",permalink:"/docs/auth/authorization_code"}},p=[],s={rightToc:p};function l(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"This way is ",Object(o.b)("strong",{parentName:"p"},"recommended"),' and the only auth-process which does not need a server-side exchange of keys. With this approach, you directly get a Token object after the user authed your application.\nYou won\'t be able to refresh the token. If you want to use the internal Http server, please add "http://localhost:YOURPORT" to your application redirect URIs.'),Object(o.b)("p",null,"More info: ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://developer.spotify.com/documentation/general/guides/authorization-guide/#implicit-grant-flow"}),"here")),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-csharp"}),'static async void Main(string[] args)\n{\n ImplicitGrantAuth auth = new ImplicitGrantAuth(\n _clientId,\n "http://localhost:4002",\n "http://localhost:4002",\n Scope.UserReadPrivate\n );\n auth.AuthReceived += async (sender, payload) =>\n {\n auth.Stop(); // `sender` is also the auth instance\n SpotifyWebAPI api = new SpotifyWebAPI()\n {\n TokenType = payload.TokenType,\n AccessToken = payload.AccessToken\n };\n // Do requests with API client\n };\n auth.Start(); // Starts an internal HTTP Server\n auth.OpenBrowser();\n}\n')))}l.isMDXComponent=!0},151:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return f}));var r=n(0),a=n.n(r);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=a.a.createContext({}),l=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},u=function(e){var t=l(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},h=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=l(n),h=r,f=u["".concat(i,".").concat(h)]||u[h]||d[h]||o;return n?a.a.createElement(f,c({ref:t},s,{components:n})):a.a.createElement(f,c({ref:t},s))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=h;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s<o;s++)i[s]=n[s];return a.a.createElement.apply(null,i)}return a.a.createElement.apply(null,n)}h.displayName="MDXCreateElement"}}]);
|
1
25bfd71f.a2b0f410.js
Normal file
1
25bfd71f.a2b0f410.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{113:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return a})),n.d(t,"rightToc",(function(){return p})),n.d(t,"default",(function(){return s}));var r=n(2),o=n(6),i=(n(0),n(151)),c={id:"example_cli_persistent_config",title:"CLI - Persistent Config"},a={id:"example_cli_persistent_config",title:"CLI - Persistent Config",source:"@site/docs/example_cli_persistent_config.md",permalink:"/docs/next/example_cli_persistent_config",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/example_cli_persistent_config.md",version:"next",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1591274536,sidebar:"docs",previous:{title:"CLI - Custom HTML",permalink:"/docs/next/example_cli_custom_html"},next:{title:"Token Swap",permalink:"/docs/next/example_token_swap"}},p=[],l={rightToc:p};function s(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(i.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}))}s.isMDXComponent=!0},151:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return d}));var r=n(0),o=n.n(r);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=o.a.createContext({}),s=function(e){var t=o.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a({},t,{},e)),n},u=function(e){var t=s(e.components);return o.a.createElement(l.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},m=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),u=s(n),m=r,d=u["".concat(c,".").concat(m)]||u[m]||f[m]||i;return n?o.a.createElement(d,a({ref:t},l,{components:n})):o.a.createElement(d,a({ref:t},l))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,c=new Array(i);c[0]=m;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a.mdxType="string"==typeof e?e:r,c[1]=a;for(var l=2;l<i;l++)c[l]=n[l];return o.a.createElement.apply(null,c)}return o.a.createElement.apply(null,n)}m.displayName="MDXCreateElement"}}]);
|
1
266dfd57.6b1204c3.js
Normal file
1
266dfd57.6b1204c3.js
Normal file
File diff suppressed because one or more lines are too long
1
27d9d47d.7cad4718.js
Normal file
1
27d9d47d.7cad4718.js
Normal file
File diff suppressed because one or more lines are too long
1
2851a227.570a0b19.js
Normal file
1
2851a227.570a0b19.js
Normal file
File diff suppressed because one or more lines are too long
1
293befc8.957dbc3f.js
Normal file
1
293befc8.957dbc3f.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{117:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return i})),r.d(t,"metadata",(function(){return c})),r.d(t,"rightToc",(function(){return p})),r.d(t,"default",(function(){return l}));var n=r(2),a=r(6),o=(r(0),r(151)),i={id:"example_asp",title:"ASP.NET"},c={id:"example_asp",title:"ASP.NET",description:"Description",source:"@site/docs/example_asp.md",permalink:"/docs/next/example_asp",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/example_asp.md",version:"next",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1591277053,sidebar:"docs",previous:{title:"Showcase",permalink:"/docs/next/showcase"},next:{title:"Blazor WASM",permalink:"/docs/next/example_blazor_wasm"}},p=[{value:"Description",id:"description",children:[]},{value:"Run it",id:"run-it",children:[]}],s={rightToc:p};function l(e){var t=e.components,r=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(n.a)({},s,r,{components:t,mdxType:"MDXLayout"}),Object(o.b)("h2",{id:"description"},"Description"),Object(o.b)("p",null,"This example is based on ASP .NET Core. It uses ",Object(o.b)("inlineCode",{parentName:"p"},"Authorization Code")," under the hood with the help of ",Object(o.b)("a",Object(n.a)({parentName:"p"},{href:"https://www.nuget.org/packages/AspNet.Security.OAuth.Spotify/"}),Object(o.b)("inlineCode",{parentName:"a"},"AspNet.Security.OAuth.Spotify")),". It stores the access token in the current user session (cookie-based) and allows to refresh tokens when they expire. Two pages are implemented:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Home shows your current playlists via pagination"),Object(o.b)("li",{parentName:"ul"},"Profile shows your current profile information")),Object(o.b)("p",null,Object(o.b)("img",Object(n.a)({parentName:"p"},{src:"/img/asp_example_home.png",alt:"ASP Example - Home"})),"\n",Object(o.b)("img",Object(n.a)({parentName:"p"},{src:"/img/asp_example_profile.png",alt:"ASP Example - Profile"}))),Object(o.b)("h2",{id:"run-it"},"Run it"),Object(o.b)("p",null,"Before running it, make sure you created an app in your ",Object(o.b)("a",Object(n.a)({parentName:"p"},{href:"https://developer.spotify.com/dashboard/"}),"spotify dashboard")," and ",Object(o.b)("inlineCode",{parentName:"p"},"https://localhost:5001")," is a redirect uri of it."),Object(o.b)("pre",null,Object(o.b)("code",Object(n.a)({parentName:"pre"},{className:"language-bash"}),"# Assumes linux and current working directory is the cloned repository\ncd SpotifyAPI.Web.Examples/Example.ASP\ndotnet restore\n\nSPOTIFY_CLIENT_ID=YourClientId SPOTIFY_CLIENT_SECRET=YourClientSecret dotnet run\n\n# Visit https://localhost:5001\n")))}l.isMDXComponent=!0},151:function(e,t,r){"use strict";r.d(t,"a",(function(){return u})),r.d(t,"b",(function(){return m}));var n=r(0),a=r.n(n);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=a.a.createContext({}),l=function(e){var t=a.a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c({},t,{},e)),r},u=function(e){var t=l(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},b={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},d=Object(n.forwardRef)((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=l(r),d=n,m=u["".concat(i,".").concat(d)]||u[d]||b[d]||o;return r?a.a.createElement(m,c({ref:t},s,{components:r})):a.a.createElement(m,c({ref:t},s))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=d;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:n,i[1]=c;for(var s=2;s<o;s++)i[s]=r[s];return a.a.createElement.apply(null,i)}return a.a.createElement.apply(null,r)}d.displayName="MDXCreateElement"}}]);
|
2
3.6fe0d7f0.js
Normal file
2
3.6fe0d7f0.js
Normal file
File diff suppressed because one or more lines are too long
6
3.6fe0d7f0.js.LICENSE.txt
Normal file
6
3.6fe0d7f0.js.LICENSE.txt
Normal file
@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* clipboard.js v2.0.6
|
||||
* https://clipboardjs.com/
|
||||
*
|
||||
* Licensed MIT © Zeno Rocha
|
||||
*/
|
1
35214713.21acf8a2.js
Normal file
1
35214713.21acf8a2.js
Normal file
File diff suppressed because one or more lines are too long
1
3abe8fb9.910596a0.js
Normal file
1
3abe8fb9.910596a0.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{119:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return c})),n.d(t,"rightToc",(function(){return l})),n.d(t,"default",(function(){return s}));var r=n(2),o=n(6),a=(n(0),n(151)),i={id:"logging",title:"Logging"},c={id:"logging",title:"Logging",description:"The library provides a way to inject your own, custom HTTP Logger. By default, no logging is performed.",source:"@site/docs/logging.md",permalink:"/docs/next/logging",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/logging.md",version:"next",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1591199053,sidebar:"docs",previous:{title:"Configuration",permalink:"/docs/next/configuration"},next:{title:"Proxy",permalink:"/docs/next/proxy"}},l=[{value:"SimpleConsoleHTTPLogger",id:"simpleconsolehttplogger",children:[]}],p={rightToc:l};function s(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"The library provides a way to inject your own, custom HTTP Logger. By default, no logging is performed."),Object(a.b)("pre",null,Object(a.b)("code",Object(r.a)({parentName:"pre"},{className:"language-csharp"}),'var config = SpotifyClientConfig\n .CreateDefault("YourAccessToken")\n .WithHTTPLogger(new YourHTTPLogger());\n\nvar spotify = new SpotifyClient(config);\n')),Object(a.b)("p",null,"The ",Object(a.b)("inlineCode",{parentName:"p"},"IHTTPLogger")," interface can be found ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/blob/master/SpotifyAPI.Web/Http/Interfaces/IHTTPLogger.cs"}),"here"),"."),Object(a.b)("h2",{id:"simpleconsolehttplogger"},"SimpleConsoleHTTPLogger"),Object(a.b)("p",null,"The library ships with a simple console-based logger"),Object(a.b)("pre",null,Object(a.b)("code",Object(r.a)({parentName:"pre"},{className:"language-csharp"}),'var config = SpotifyClientConfig\n .CreateDefault("YourAccessToken")\n .WithHTTPLogger(new SimpleConsoleHTTPLogger());\n\nvar spotify = new SpotifyClient(config);\n')),Object(a.b)("p",null,"This logger produces a simple console output for debugging purposes:"),Object(a.b)("pre",null,Object(a.b)("code",Object(r.a)({parentName:"pre"},{className:"language-text"}),'GET tracks/NotAnid []\n--\x3e BadRequest application/json { "error" : { "status" : 400, "message" : "\n\nGET tracks/6YlOxoHWLjH6uVQvxUIUug []\n--\x3e OK application/json { "album" : { "album_type" : "album", "arti\n')))}s.isMDXComponent=!0},151:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return b}));var r=n(0),o=n.n(r);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=o.a.createContext({}),s=function(e){var t=o.a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},u=function(e){var t=s(e.components);return o.a.createElement(p.Provider,{value:t},e.children)},g={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},f=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(n),f=r,b=u["".concat(i,".").concat(f)]||u[f]||g[f]||a;return n?o.a.createElement(b,c({ref:t},p,{components:n})):o.a.createElement(b,c({ref:t},p))}));function b(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var p=2;p<a;p++)i[p]=n[p];return o.a.createElement.apply(null,i)}return o.a.createElement.apply(null,n)}f.displayName="MDXCreateElement"}}]);
|
1
3c5916b7.21547e83.js
Normal file
1
3c5916b7.21547e83.js
Normal file
File diff suppressed because one or more lines are too long
19
404.html
Normal file
19
404.html
Normal file
@ -0,0 +1,19 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="generator" content="Docusaurus v2.0.0-alpha.56">
|
||||
<title data-react-helmet="true">Page Not Found | SpotifyAPI-NET</title><meta data-react-helmet="true" property="og:title" content="Page Not Found | SpotifyAPI-NET"><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"><link data-react-helmet="true" rel="shortcut icon" href="/img/favicon.ico"><link rel="stylesheet" href="/styles.8a053330.css">
|
||||
<link rel="preload" href="/styles.b4c4f1e6.js" as="script">
|
||||
<link rel="preload" href="/runtime~main.00679df5.js" as="script">
|
||||
<link rel="preload" href="/main.5163b4fc.js" as="script">
|
||||
</head>
|
||||
<body>
|
||||
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=window.matchMedia("(prefers-color-scheme: dark)"),n=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();null!==n?t(n):e.matches&&t("dark")}()</script><div id="__docusaurus">
|
||||
<nav class="navbar navbar--light navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><div aria-label="Navigation bar toggle" class="navbar__toggle" role="button" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></div><a class="navbar__brand" href="/"><img class="navbar__logo" src="/img/logo.svg" alt="SpotifyAPI-NET"><strong class="navbar__title">SpotifyAPI-NET</strong></a><div class="navbar__item dropdown dropdown--hoverable dropdown--left"><a activeclassname="navbar__link--active" class="navbar__item navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/introduction">Latest/Next</a></li><li><a class="dropdown__link" href="/docs/home">5.1.1</a></li></ul></div><a class="navbar__item navbar__link" href="/news">News</a></div><div class="navbar__items navbar__items--right"><a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a><div class="react-toggle react-toggle--disabled displayOnlyInLargeViewport_1gtM"><div class="react-toggle-track"><div class="react-toggle-track-check"><span class="toggle_keGJ moon_1gwN"></span></div><div class="react-toggle-track-x"><span class="toggle_keGJ sun_3CPA"></span></div></div><div class="react-toggle-thumb"></div><input type="checkbox" disabled="" aria-label="Dark mode toggle" class="react-toggle-screenreader-only"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a class="navbar__brand" href="/"><img class="navbar__logo" src="/img/logo.svg" alt="SpotifyAPI-NET"><strong class="navbar__title">SpotifyAPI-NET</strong></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"><li class="menu__list-item"><a activeclassname="navbar__link--active" class="menu__link menu__link--sublist">Docs</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/next/introduction">Latest/Next</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/home">5.1.1</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/news">News</a></li><li class="menu__list-item"><a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="menu__link">GitHub</a></li></ul></div></div></div></nav><div class="main-wrapper"><div class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></div></div><footer class="footer footer--dark"><div class="container"><div class="text--center"><div>Copyright © 2020 Jonas Dellinger. Built with Docusaurus.</div></div></div></footer></div>
|
||||
<script src="/styles.b4c4f1e6.js"></script>
|
||||
<script src="/runtime~main.00679df5.js"></script>
|
||||
<script src="/main.5163b4fc.js"></script>
|
||||
</body>
|
||||
</html>
|
1
516486bd.7eba38cb.js
Normal file
1
516486bd.7eba38cb.js
Normal file
File diff suppressed because one or more lines are too long
1
52804278.c2fc9c39.js
Normal file
1
52804278.c2fc9c39.js
Normal file
File diff suppressed because one or more lines are too long
1
53.71278610.js
Normal file
1
53.71278610.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{157:function(e,t,a){"use strict";var n=a(0);const o=a.n(n).a.createContext({isDarkTheme:!1,setLightTheme:()=>{},setDarkTheme:()=>{}});t.a=o},158:function(e,t,a){"use strict";var n=a(0);const o=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:()=>{}});t.a=o},159:function(e,t,a){"use strict";var n=a(0),o=a(157);t.a=function(){return Object(n.useContext)(o.a)}},166:function(e,t,a){"use strict";a.r(t);var n=a(0),o=a.n(n),c=a(161);t.default=function(){return o.a.createElement(c.a,{title:"Page Not Found"},o.a.createElement("div",{className:"container margin-vert--xl"},o.a.createElement("div",{className:"row"},o.a.createElement("div",{className:"col col--6 col--offset-3"},o.a.createElement("h1",{className:"hero__title"},"Page Not Found"),o.a.createElement("p",null,"We could not find what you were looking for."),o.a.createElement("p",null,"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))}}}]);
|
1
6373637a.07907811.js
Normal file
1
6373637a.07907811.js
Normal file
File diff suppressed because one or more lines are too long
1
67d5074e.f0ef1b0d.js
Normal file
1
67d5074e.f0ef1b0d.js
Normal file
File diff suppressed because one or more lines are too long
1
700347c0.fb6e8492.js
Normal file
1
700347c0.fb6e8492.js
Normal file
File diff suppressed because one or more lines are too long
1
73139ff1.52bd4c1b.js
Normal file
1
73139ff1.52bd4c1b.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{126:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return c})),r.d(t,"metadata",(function(){return i})),r.d(t,"rightToc",(function(){return p})),r.d(t,"default",(function(){return l}));var n=r(2),o=r(6),a=(r(0),r(151)),c={id:"example_uwp",title:"UWP"},i={id:"example_uwp",title:"UWP",source:"@site/docs/example_uwp.md",permalink:"/docs/next/example_uwp",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/example_uwp.md",version:"next",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1591274536,sidebar:"docs",previous:{title:"Token Swap",permalink:"/docs/next/example_token_swap"}},p=[],u={rightToc:p};function l(e){var t=e.components,r=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(n.a)({},u,r,{components:t,mdxType:"MDXLayout"}))}l.isMDXComponent=!0},151:function(e,t,r){"use strict";r.d(t,"a",(function(){return f})),r.d(t,"b",(function(){return d}));var n=r(0),o=r.n(n);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?c(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):c(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var u=o.a.createContext({}),l=function(e){var t=o.a.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):i({},t,{},e)),r},f=function(e){var t=l(e.components);return o.a.createElement(u.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},m=Object(n.forwardRef)((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),f=l(r),m=n,d=f["".concat(c,".").concat(m)]||f[m]||s[m]||a;return r?o.a.createElement(d,i({ref:t},u,{components:r})):o.a.createElement(d,i({ref:t},u))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,c=new Array(a);c[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:n,c[1]=i;for(var u=2;u<a;u++)c[u]=r[u];return o.a.createElement.apply(null,c)}return o.a.createElement.apply(null,r)}m.displayName="MDXCreateElement"}}]);
|
1
755cfc2e.33dfa066.js
Normal file
1
755cfc2e.33dfa066.js
Normal file
File diff suppressed because one or more lines are too long
1
8581bb41.c555b67d.js
Normal file
1
8581bb41.c555b67d.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{128:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return c})),n.d(t,"rightToc",(function(){return l})),n.d(t,"default",(function(){return u}));var r=n(2),o=n(6),a=(n(0),n(151)),i={id:"client_credentials",title:"Client Credentials"},c={id:"version-5.1.1/auth/client_credentials",title:"Client Credentials",description:"With this approach, you make a POST Request with a base64 encoded string (consists of ClientId + ClientSecret). You will directly get the token (Without a local HTTP Server), but it will expire and can't be refreshed.",source:"@site/versioned_docs/version-5.1.1/auth/client_credentials.md",permalink:"/docs/auth/client_credentials",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/versioned_docs/version-5.1.1/auth/client_credentials.md",version:"5.1.1",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1589387236,sidebar:"version-5.1.1/someSidebar",previous:{title:"Authorization Code",permalink:"/docs/auth/authorization_code"},next:{title:"Token Swap",permalink:"/docs/auth/token_swap"}},l=[],s={rightToc:l};function u(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"With this approach, you make a POST Request with a base64 encoded string (consists of ClientId + ClientSecret). You will directly get the token (Without a local HTTP Server), but it will expire and can't be refreshed.\nIf you want to use it securely, you would need to do it all server-side.\n",Object(a.b)("strong",{parentName:"p"},"NOTE:")," You will only be able to query non-user-related information e.g search for a Track."),Object(a.b)("p",null,"More info: ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://developer.spotify.com/documentation/general/guides/authorization-guide/#client-credentials-flow"}),"here")),Object(a.b)("pre",null,Object(a.b)("code",Object(r.a)({parentName:"pre"},{className:"language-csharp"}),"CredentialsAuth auth = new CredentialsAuth(_clientId, _secretId);\nToken token = await auth.GetToken();\nSpotifyWebAPI api = new SpotifyWebAPI()\n{\n TokenType = token.TokenType,\n AccessToken = token.AccessToken\n};\n")))}u.isMDXComponent=!0},151:function(e,t,n){"use strict";n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return b}));var r=n(0),o=n.n(r);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=o.a.createContext({}),u=function(e){var t=o.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},p=function(e){var t=u(e.components);return o.a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},f=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),p=u(n),f=r,b=p["".concat(i,".").concat(f)]||p[f]||d[f]||a;return n?o.a.createElement(b,c({ref:t},s,{components:n})):o.a.createElement(b,c({ref:t},s))}));function b(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s<a;s++)i[s]=n[s];return o.a.createElement.apply(null,i)}return o.a.createElement.apply(null,n)}f.displayName="MDXCreateElement"}}]);
|
1
8ddd655f.5d497e75.js
Normal file
1
8ddd655f.5d497e75.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{129:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return i})),r.d(t,"metadata",(function(){return c})),r.d(t,"rightToc",(function(){return p})),r.d(t,"default",(function(){return s}));var n=r(2),o=r(6),a=(r(0),r(151)),i={id:"proxy",title:"Proxy Settings",sidebar_label:"Proxy Settings"},c={id:"version-5.1.1/web/proxy",title:"Proxy Settings",description:"You can forward your proxy settings to the web api by using a field in the SpotifyLocalAPIConfig.",source:"@site/versioned_docs/version-5.1.1/web/proxy.md",permalink:"/docs/web/proxy",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/versioned_docs/version-5.1.1/web/proxy.md",version:"5.1.1",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1590938477,sidebar_label:"Proxy Settings",sidebar:"version-5.1.1/someSidebar",previous:{title:"Profiles",permalink:"/docs/web/profiles"},next:{title:"Search",permalink:"/docs/web/search"}},p=[],l={rightToc:p};function s(e){var t=e.components,r=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(n.a)({},l,r,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"You can forward your proxy settings to the web api by using a field in the ",Object(a.b)("inlineCode",{parentName:"p"},"SpotifyLocalAPIConfig"),"."),Object(a.b)("pre",null,Object(a.b)("code",Object(n.a)({parentName:"pre"},{className:"language-csharp"}),'ProxyConfig proxyConfig = new ProxyConfig()\n{\n Host = "127.0.0.1",\n Port = 8080\n // Additional values like Username and Password are available\n};\n\nSpotifyWebAPI api = new SpotifyWebAPI(proxyConfig);\n')))}s.isMDXComponent=!0},151:function(e,t,r){"use strict";r.d(t,"a",(function(){return u})),r.d(t,"b",(function(){return b}));var n=r(0),o=r.n(n);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=o.a.createContext({}),s=function(e){var t=o.a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):c({},t,{},e)),r},u=function(e){var t=s(e.components);return o.a.createElement(l.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},y=Object(n.forwardRef)((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,i=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),u=s(r),y=n,b=u["".concat(i,".").concat(y)]||u[y]||f[y]||a;return r?o.a.createElement(b,c({ref:t},l,{components:r})):o.a.createElement(b,c({ref:t},l))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=y;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:n,i[1]=c;for(var l=2;l<a;l++)i[l]=r[l];return o.a.createElement.apply(null,i)}return o.a.createElement.apply(null,r)}y.displayName="MDXCreateElement"}}]);
|
1
9008bace.58655dda.js
Normal file
1
9008bace.58655dda.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{130:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return a})),r.d(t,"metadata",(function(){return i})),r.d(t,"rightToc",(function(){return l})),r.d(t,"default",(function(){return u}));var n=r(2),o=r(6),c=(r(0),r(151)),a={id:"example_cli_custom_html",title:"CLI - Custom HTML"},i={id:"example_cli_custom_html",title:"CLI - Custom HTML",source:"@site/docs/example_cli_custom_html.md",permalink:"/docs/next/example_cli_custom_html",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/example_cli_custom_html.md",version:"next",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1591274536,sidebar:"docs",previous:{title:"Blazor ServerSide",permalink:"/docs/next/example_blazor"},next:{title:"CLI - Persistent Config",permalink:"/docs/next/example_cli_persistent_config"}},l=[],p={rightToc:l};function u(e){var t=e.components,r=Object(o.a)(e,["components"]);return Object(c.b)("wrapper",Object(n.a)({},p,r,{components:t,mdxType:"MDXLayout"}))}u.isMDXComponent=!0},151:function(e,t,r){"use strict";r.d(t,"a",(function(){return s})),r.d(t,"b",(function(){return d}));var n=r(0),o=r.n(n);function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){c(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=o.a.createContext({}),u=function(e){var t=o.a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i({},t,{},e)),r},s=function(e){var t=u(e.components);return o.a.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},f=Object(n.forwardRef)((function(e,t){var r=e.components,n=e.mdxType,c=e.originalType,a=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),s=u(r),f=n,d=s["".concat(a,".").concat(f)]||s[f]||m[f]||c;return r?o.a.createElement(d,i({ref:t},p,{components:r})):o.a.createElement(d,i({ref:t},p))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var c=r.length,a=new Array(c);a[0]=f;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:n,a[1]=i;for(var p=2;p<c;p++)a[p]=r[p];return o.a.createElement.apply(null,a)}return o.a.createElement.apply(null,r)}f.displayName="MDXCreateElement"}}]);
|
1
902b04f6.002728c7.js
Normal file
1
902b04f6.002728c7.js
Normal file
File diff suppressed because one or more lines are too long
2
92bb876c.47d4d3de.js
Normal file
2
92bb876c.47d4d3de.js
Normal file
File diff suppressed because one or more lines are too long
5
92bb876c.47d4d3de.js.LICENSE.txt
Normal file
5
92bb876c.47d4d3de.js.LICENSE.txt
Normal file
@ -0,0 +1,5 @@
|
||||
/*!
|
||||
Copyright (c) 2017 Jed Watson.
|
||||
Licensed under the MIT License (MIT), see
|
||||
http://jedwatson.github.io/classnames
|
||||
*/
|
1
9ed00105.3148ddcd.js
Normal file
1
9ed00105.3148ddcd.js
Normal file
File diff suppressed because one or more lines are too long
1
a09c2993.30a62cd8.js
Normal file
1
a09c2993.30a62cd8.js
Normal file
File diff suppressed because one or more lines are too long
1
a1189d06.1d6cb4f9.js
Normal file
1
a1189d06.1d6cb4f9.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13"><g stroke-width="2" stroke="#aaa" fill="none"><path d="M11.29 11.71l-4-4"/><circle cx="5" cy="5" r="4"/></g></svg>
|
Before Width: | Height: | Size: 216 B |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{258:function(e,t,s){"use strict";s.r(t);var a=s(28),r=Object(a.a)({},function(){var e=this.$createElement,t=this._self._c||e;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"examples"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#examples","aria-hidden":"true"}},[this._v("#")]),this._v(" Examples")]),this._v(" "),t("p",[this._v("This page is currently empty. Do you have useful examples? Please open a PR")])])},[],!1,null,null,null);t.default=r.exports}}]);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{264:function(t,e,a){"use strict";a.r(e);var r=a(28),s=Object(r.a)({},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"profiles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#profiles","aria-hidden":"true"}},[t._v("#")]),t._v(" Profiles")]),t._v(" "),a("h2",{attrs:{id:"getprivateprofile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getprivateprofile","aria-hidden":"true"}},[t._v("#")]),t._v(" GetPrivateProfile")]),t._v(" "),a("blockquote",[a("p",[t._v("Get detailed profile information about the current user (including the current user’s username).")])]),t._v(" "),a("p",[a("strong",[t._v("Parameters")])]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Name")]),t._v(" "),a("th",[t._v("Description")]),t._v(" "),a("th",[t._v("Example")])])]),t._v(" "),a("tbody")]),t._v(" "),a("p",[t._v("Returns a "),a("a",{attrs:{href:"https://developer.spotify.com/web-api/object-model/#user-object-private",target:"_blank",rel:"noopener noreferrer"}},[t._v("PrivateProfile"),a("OutboundLink")],1)]),t._v(" "),a("p",[a("strong",[t._v("Usage")])]),t._v(" "),a("div",{staticClass:"language-csharp extra-class"},[a("pre",{pre:!0,attrs:{class:"language-csharp"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PrivateUser")]),t._v(" user "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" _spotify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetPrivateProfile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nConsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WriteLine")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("DisplayName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("hr"),t._v(" "),a("h2",{attrs:{id:"getpublicprofile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getpublicprofile","aria-hidden":"true"}},[t._v("#")]),t._v(" GetPublicProfile")]),t._v(" "),a("blockquote",[a("p",[t._v("Get public profile information about a Spotify user.")])]),t._v(" "),a("p",[a("strong",[t._v("Parameters")])]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Name")]),t._v(" "),a("th",[t._v("Description")]),t._v(" "),a("th",[t._v("Example")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("userId")]),t._v(" "),a("td",[t._v("The user's Spotify user ID.")]),t._v(" "),a("td",[t._v("EXAMPLE")])])])]),t._v(" "),a("p",[t._v("Returns a "),a("a",{attrs:{href:"https://developer.spotify.com/web-api/object-model/#user-object-public",target:"_blank",rel:"noopener noreferrer"}},[t._v("PublicProfile"),a("OutboundLink")],1)]),t._v(" "),a("p",[a("strong",[t._v("Usage")])]),t._v(" "),a("div",{staticClass:"language-csharp extra-class"},[a("pre",{pre:!0,attrs:{class:"language-csharp"}},[a("code")])]),a("hr")])},[],!1,null,null,null);e.default=s.exports}}]);
|
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{265:function(t,s,a){"use strict";a.r(s);var n=a(28),e=Object(n.a)({},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"proxy-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#proxy-settings","aria-hidden":"true"}},[t._v("#")]),t._v(" Proxy Settings")]),t._v(" "),a("p",[t._v("You can forward your proxy settings to the web api by using a field in the "),a("code",[t._v("SpotifyLocalAPIConfig")]),t._v(".")]),t._v(" "),a("div",{staticClass:"language-csharp extra-class"},[a("pre",{pre:!0,attrs:{class:"language-csharp"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ProxyConfig")]),t._v(" proxyConfig "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ProxyConfig")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Host "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Port "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8080")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Additional values like Username and Password are available")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SpotifyWebAPI")]),t._v(" api "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SpotifyWebAPI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("proxyConfig"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])},[],!1,null,null,null);s.default=e.exports}}]);
|
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{266:function(t,a,s){"use strict";s.r(a);var e=s(28),r=Object(e.a)({},function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"search"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#search","aria-hidden":"true"}},[t._v("#")]),t._v(" Search")]),t._v(" "),s("h2",{attrs:{id:"searchitems"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#searchitems","aria-hidden":"true"}},[t._v("#")]),t._v(" SearchItems")]),t._v(" "),s("blockquote",[s("p",[t._v("Get Spotify catalog information about artists, albums, tracks or playlists that match a keyword string.")])]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("You may want to use "),s("code",[t._v("SearchItemsEscaped")]),t._v(" if you're processing user-input without validation")])]),t._v(" "),s("p",[s("strong",[t._v("Parameters")])]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("Name")]),t._v(" "),s("th",[t._v("Description")]),t._v(" "),s("th",[t._v("Example")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("q")]),t._v(" "),s("td",[t._v("The search query's keywords (and optional field filters and operators), for example q=roadhouse+blues.")]),t._v(" "),s("td",[s("code",[t._v('"roadhouse+blues"')])])]),t._v(" "),s("tr",[s("td",[t._v("type")]),t._v(" "),s("td",[t._v("A list of item types to search across.")]),t._v(" "),s("td",[s("code",[t._v("SearchType.Album")])])]),t._v(" "),s("tr",[s("td",[t._v("[limit]")]),t._v(" "),s("td",[t._v("The maximum number of items to return. Default: 20. Minimum: 1. Maximum: 50.")]),t._v(" "),s("td",[s("code",[t._v("20")])])]),t._v(" "),s("tr",[s("td",[t._v("[offset]")]),t._v(" "),s("td",[t._v("The index of the first result to return. Default: 0")]),t._v(" "),s("td",[s("code",[t._v("0")])])]),t._v(" "),s("tr",[s("td",[t._v("[market]")]),t._v(" "),s("td",[t._v("An ISO 3166-1 alpha-2 country code or the string from_token.")]),t._v(" "),s("td",[s("code",[t._v('"de"')])])])])]),t._v(" "),s("p",[t._v("Returns a "),s("code",[t._v("SearchItem")]),t._v(" which contains the properties "),s("code",[t._v("Paging<FullArtist> Artists")]),t._v(","),s("code",[t._v("Paging<FullTrack> Tracks")]),t._v(", "),s("code",[t._v("Paging<SimpleAlbum> Albums")]),t._v(", "),s("code",[t._v("Paging<SimplePlaylist> Playlists")]),t._v(". They are filled based on your search-type.")]),t._v(" "),s("p",[s("strong",[t._v("Usage")])]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SearchItem")]),t._v(" item "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" _spotify"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("SearchItems")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"roadhouse+blues"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" SearchType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Album "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" SearchType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Playlist"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nConsole"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("WriteLine")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Albums"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Total"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//How many results are there in total? NOTE: item.Tracks = item.Artists = null")]),t._v("\n")])])]),s("hr"),t._v(" "),s("h2",{attrs:{id:"searchitemsescaped"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#searchitemsescaped","aria-hidden":"true"}},[t._v("#")]),t._v(" SearchItemsEscaped")]),t._v(" "),s("blockquote",[s("p",[t._v("Get Spotify catalog information about artists, albums, tracks or playlists that match a keyword string.")])]),t._v(" "),s("p",[t._v("Works like "),s("code",[t._v("SearchItems")]),t._v(", but URL escapes all characters")])])},[],!1,null,null,null);a.default=r.exports}}]);
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{268:function(t,s,a){"use strict";a.r(s);var n=a(28),e=Object(n.a)({},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"utilities"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#utilities","aria-hidden":"true"}},[t._v("#")]),t._v(" Utilities")]),t._v(" "),a("h2",{attrs:{id:"paging-methods"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#paging-methods","aria-hidden":"true"}},[t._v("#")]),t._v(" Paging-Methods")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("SpotifyWebAPI")]),t._v(" features two paging-helper Methods, "),a("code",[t._v("GetNextPage(Paging<T> page)")]),t._v(" and "),a("code",[t._v("GetPreviousPage(Paging<T> page)")]),t._v(".\nBoth are an easy way to receive the next/previous page of a Paging-Object.")]),t._v(" "),a("p",[t._v("Sample:")]),t._v(" "),a("div",{staticClass:"language-csharp extra-class"},[a("pre",{pre:!0,attrs:{class:"language-csharp"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" playlistTracks "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" _spotify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetPlaylistTracks")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1122095781"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"4EcNf2l8rXInbJOf3tQdgU"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("50")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("WriteLine")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("playlistTracks"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Items"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Count"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("playlistTracks"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("HasNextPage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("break")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n playlistTracks "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" _spotify"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetNextPage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("playlistTracks"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])},[],!1,null,null,null);s.default=e.exports}}]);
|
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{141:function(n,w,o){}}]);
|
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{166:function(t,e,n){},246:function(t,e,n){"use strict";var i=n(166);n.n(i).a},270:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:function(t,e){var n=e.props,i=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(246),n(28)),a=Object(r.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=a.exports}}]);
|
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{248:function(t,e,s){"use strict";s.r(e);var n=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],o={methods:{getMsg:function(){return n[Math.floor(Math.random()*n.length)]}}},i=s(28),h=Object(i.a)(o,function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"theme-container"},[e("div",{staticClass:"theme-default-content"},[e("h1",[this._v("404")]),this._v(" "),e("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),e("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])},[],!1,null,null,null);e.default=h.exports}}]);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{251:function(t,e,a){"use strict";a.r(e);var s=a(28),n=Object(s.a)({},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"clientcredentialsauth"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#clientcredentialsauth","aria-hidden":"true"}},[t._v("#")]),t._v(" ClientCredentialsAuth")]),t._v(" "),a("p",[t._v("With this approach, you make a POST Request with a base64 encoded string (consists of ClientId + ClientSecret). You will directly get the token (Without a local HTTP Server), but it will expire and can't be refreshed.\nIf you want to use it securely, you would need to do it all server-side.\n"),a("strong",[t._v("NOTE:")]),t._v(" You will only be able to query non-user-related information e.g search for a Track.")]),t._v(" "),a("p",[t._v("More info: "),a("a",{attrs:{href:"https://developer.spotify.com/documentation/general/guides/authorization-guide/#client-credentials-flow",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1)]),t._v(" "),a("div",{staticClass:"language-csharp extra-class"},[a("pre",{pre:!0,attrs:{class:"language-csharp"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CredentialsAuth")]),t._v(" auth "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CredentialsAuth")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_clientId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _secretId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Token")]),t._v(" token "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" auth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetToken")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SpotifyWebAPI")]),t._v(" api "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SpotifyWebAPI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n TokenType "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("TokenType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n AccessToken "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" token"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("AccessToken\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])},[],!1,null,null,null);e.default=n.exports}}]);
|
@ -1 +0,0 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{252:function(t,e,o){"use strict";o.r(e);var r=o(28),i=Object(r.a)({},function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"getting-started"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#getting-started","aria-hidden":"true"}},[t._v("#")]),t._v(" Getting Started")]),t._v(" "),o("h2",{attrs:{id:"auth-methods"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#auth-methods","aria-hidden":"true"}},[t._v("#")]),t._v(" Auth-Methods")]),t._v(" "),o("p",[t._v("Before you can use the Web API's full functionality, you need the user to authenticate your Application.\nIf you want to know more, you can read to the whole auth-process "),o("a",{attrs:{href:"https://developer.spotify.com/web-api/authorization-guide/",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),o("OutboundLink")],1),t._v(".")]),t._v(" "),o("p",[t._v("Before you start, install "),o("code",[t._v("SpotifyAPI.Web.Auth")]),t._v(" and create an application at Spotify: "),o("a",{attrs:{href:"https://developer.spotify.com/my-applications/#!/applications",target:"_blank",rel:"noopener noreferrer"}},[t._v("Your Applications"),o("OutboundLink")],1)]),t._v(" "),o("p",[t._v("After you have created your Application, you will have following important values:")]),t._v(" "),o("table",[o("thead",[o("tr",[o("th",[t._v("Name")]),t._v(" "),o("th",[t._v("Description")])])]),t._v(" "),o("tbody",[o("tr",[o("td",[o("strong",[t._v("Client_Id")])]),t._v(" "),o("td",[t._v("This is your client_id, you don't have to hide it")])]),t._v(" "),o("tr",[o("td",[o("strong",[t._v("Client_Secret")])]),t._v(" "),o("td",[t._v("Never use this in one of your client-side apps! Keep it secret!")])]),t._v(" "),o("tr",[o("td",[o("strong",[t._v("Redirect URIs")])]),t._v(" "),o("td",[t._v("Some of auth flows require that you set the correct redirect URI")])])])]),t._v(" "),o("p",[t._v("Now you can start with the user-authentication. Spotify provides 3 ways (4 if you consider different implementations):")]),t._v(" "),o("ul",[o("li",[o("p",[o("RouterLink",{attrs:{to:"/auth/implicit_grant.html"}},[t._v("ImplicitGrantAuth")])],1)]),t._v(" "),o("li",[o("p",[o("RouterLink",{attrs:{to:"/auth/token_swap.html"}},[t._v("TokenSwapAuth")]),t._v(" ("),o("strong",[t._v("Recommended")]),t._v(", server-side code mandatory, most secure method. The necessary code is shown here so you do not have to code it yourself.)")],1)]),t._v(" "),o("li",[o("p",[o("RouterLink",{attrs:{to:"/auth/authorization_code.html"}},[t._v("AutorizationCodeAuth")]),t._v(" (Not recommended, server-side code needed, else it's unsecure)")],1)]),t._v(" "),o("li",[o("p",[o("RouterLink",{attrs:{to:"/auth/client_credentials.html"}},[t._v("ClientCredentialsAuth")]),t._v(" (Not recommended, server-side code needed, else it's unsecure)")],1)])]),t._v(" "),o("p",[t._v("Overview:\n"),o("img",{attrs:{src:"http://i.imgur.com/uf3ahTl.png",alt:"Overview"}})])])},[],!1,null,null,null);e.default=i.exports}}]);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,142 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>AutorizationCodeAuth | SpotifyAPI-NET</title>
|
||||
<meta name="description" content="🔉 An API for the Spotify-Client and the Spotify Web API, written in C#/.NET">
|
||||
<meta name="generator" content="VuePress 1.4.0">
|
||||
|
||||
|
||||
<link rel="preload" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css" as="style"><link rel="preload" href="/SpotifyAPI-NET/assets/js/app.4310edfd.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/2.31113494.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/6.66d7c2fe.js" as="script"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/10.002ef499.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/11.7de40808.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/12.db52d3ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/13.8b5c9b44.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/14.c0f35def.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/15.cfa7a58a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/16.9c0ba2de.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/17.5154e8d9.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/18.6bcd5883.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/19.598a9a7a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/20.540a6f36.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/21.956153ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/22.a4edf47c.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/23.e0985451.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/24.a9466c6a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/25.33dd1a97.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/26.fd03eb58.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/3.7ef0fbfe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/4.2f270ddd.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/5.14f2fea3.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/7.830f290b.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/8.9cb2269f.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/9.f14800d8.js">
|
||||
<link rel="stylesheet" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" data-server-rendered="true"><div class="theme-container no-sidebar"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/SpotifyAPI-NET/" class="home-link router-link-active"><!----> <span class="site-name">SpotifyAPI-NET</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link router-link-exact-active router-link-active">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link router-link-exact-active router-link-active">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>AutorizationCodeAuth</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/SpotifyAPI-NET/auth/authorization_code.html#token-refresh" class="sidebar-link">Token Refresh</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="autorizationcodeauth"><a href="#autorizationcodeauth" aria-hidden="true" class="header-anchor">#</a> AutorizationCodeAuth</h1> <p>This way is <strong>not recommended</strong> for client-side apps and requires server-side code to run securely.
|
||||
With this approach, you first get a code which you need to trade against the access-token.
|
||||
In this exchange you need to provide your Client-Secret and because of that it's not recommended.
|
||||
A good thing about this method: You can always refresh your token, without having the user to auth it again.</p> <p>More info: <a href="https://developer.spotify.com/documentation/general/guides/authorization-guide/#authorization-code-flow" target="_blank" rel="noopener noreferrer">here<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></p> <div class="language-csharp extra-class"><pre class="language-csharp"><code><span class="token keyword">static</span> <span class="token keyword">async</span> <span class="token keyword">void</span> <span class="token function">Main</span><span class="token punctuation">(</span><span class="token keyword">string</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
<span class="token class-name">AuthorizationCodeAuth</span> auth <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AuthorizationCodeAuth</span><span class="token punctuation">(</span>
|
||||
_clientId<span class="token punctuation">,</span>
|
||||
_secretId<span class="token punctuation">,</span>
|
||||
<span class="token string">"http://localhost:4002"</span><span class="token punctuation">,</span>
|
||||
<span class="token string">"http://localhost:4002"</span><span class="token punctuation">,</span>
|
||||
Scope<span class="token punctuation">.</span>PlaylistReadPrivate <span class="token operator">|</span> Scope<span class="token punctuation">.</span>PlaylistReadCollaborative
|
||||
<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
|
||||
auth<span class="token punctuation">.</span>AuthReceived <span class="token operator">+=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span>sender<span class="token punctuation">,</span> payload<span class="token punctuation">)</span> <span class="token operator">=></span>
|
||||
<span class="token punctuation">{</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">Stop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
<span class="token class-name">Token</span> token <span class="token operator">=</span> <span class="token keyword">await</span> auth<span class="token punctuation">.</span><span class="token function">ExchangeCode</span><span class="token punctuation">(</span>payload<span class="token punctuation">.</span>Code<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
<span class="token class-name">SpotifyWebAPI</span> api <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SpotifyWebAPI</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
TokenType <span class="token operator">=</span> token<span class="token punctuation">.</span>TokenType<span class="token punctuation">,</span>
|
||||
AccessToken <span class="token operator">=</span> token<span class="token punctuation">.</span>AccessToken
|
||||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||||
<span class="token comment">// Do requests with API client</span>
|
||||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">Start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Starts an internal HTTP Server</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">OpenBrowser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
<span class="token punctuation">}</span>
|
||||
</code></pre></div><h2 id="token-refresh"><a href="#token-refresh" aria-hidden="true" class="header-anchor">#</a> Token Refresh</h2> <p>Once the <code>AccessToken</code> is expired, you can use your <code>RefreshToken</code> to get a new one.
|
||||
In this procedure, no HTTP Server is needed in the background and a single HTTP Request is made.</p> <div class="language-csharp extra-class"><pre class="language-csharp"><code><span class="token comment">// Auth code from above</span>
|
||||
|
||||
<span class="token keyword">if</span><span class="token punctuation">(</span>token<span class="token punctuation">.</span><span class="token function">IsExpired</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
<span class="token class-name">Token</span> newToken <span class="token operator">=</span> <span class="token keyword">await</span> auth<span class="token punctuation">.</span><span class="token function">RefreshToken</span><span class="token punctuation">(</span>token<span class="token punctuation">.</span>RefreshToken<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
api<span class="token punctuation">.</span>AccessToken <span class="token operator">=</span> newToken<span class="token punctuation">.</span><span class="token class-name">AccessToken</span>
|
||||
api<span class="token punctuation">.</span>TokenType <span class="token operator">=</span> newToken<span class="token punctuation">.</span>TokenType
|
||||
<span class="token punctuation">}</span>
|
||||
</code></pre></div></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/auth/authorization_code.md" target="_blank" rel="noopener noreferrer">Help us improve this page!</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">5/30/2020, 9:56:57 PM</span></div></footer> <!----> </main></div><div class="global-ui"></div></div>
|
||||
<script src="/SpotifyAPI-NET/assets/js/app.4310edfd.js" defer></script><script src="/SpotifyAPI-NET/assets/js/2.31113494.js" defer></script><script src="/SpotifyAPI-NET/assets/js/6.66d7c2fe.js" defer></script>
|
||||
</body>
|
||||
</html>
|
@ -1,115 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>ClientCredentialsAuth | SpotifyAPI-NET</title>
|
||||
<meta name="description" content="🔉 An API for the Spotify-Client and the Spotify Web API, written in C#/.NET">
|
||||
<meta name="generator" content="VuePress 1.4.0">
|
||||
|
||||
|
||||
<link rel="preload" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css" as="style"><link rel="preload" href="/SpotifyAPI-NET/assets/js/app.4310edfd.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/2.31113494.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/7.830f290b.js" as="script"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/10.002ef499.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/11.7de40808.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/12.db52d3ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/13.8b5c9b44.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/14.c0f35def.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/15.cfa7a58a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/16.9c0ba2de.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/17.5154e8d9.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/18.6bcd5883.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/19.598a9a7a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/20.540a6f36.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/21.956153ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/22.a4edf47c.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/23.e0985451.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/24.a9466c6a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/25.33dd1a97.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/26.fd03eb58.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/3.7ef0fbfe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/4.2f270ddd.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/5.14f2fea3.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/6.66d7c2fe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/8.9cb2269f.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/9.f14800d8.js">
|
||||
<link rel="stylesheet" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" data-server-rendered="true"><div class="theme-container no-sidebar"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/SpotifyAPI-NET/" class="home-link router-link-active"><!----> <span class="site-name">SpotifyAPI-NET</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link router-link-exact-active router-link-active">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link router-link-exact-active router-link-active">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>ClientCredentialsAuth</span> <!----></p> <!----></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="clientcredentialsauth"><a href="#clientcredentialsauth" aria-hidden="true" class="header-anchor">#</a> ClientCredentialsAuth</h1> <p>With this approach, you make a POST Request with a base64 encoded string (consists of ClientId + ClientSecret). You will directly get the token (Without a local HTTP Server), but it will expire and can't be refreshed.
|
||||
If you want to use it securely, you would need to do it all server-side.
|
||||
<strong>NOTE:</strong> You will only be able to query non-user-related information e.g search for a Track.</p> <p>More info: <a href="https://developer.spotify.com/documentation/general/guides/authorization-guide/#client-credentials-flow" target="_blank" rel="noopener noreferrer">here<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></p> <div class="language-csharp extra-class"><pre class="language-csharp"><code><span class="token class-name">CredentialsAuth</span> auth <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">CredentialsAuth</span><span class="token punctuation">(</span>_clientId<span class="token punctuation">,</span> _secretId<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
<span class="token class-name">Token</span> token <span class="token operator">=</span> <span class="token keyword">await</span> auth<span class="token punctuation">.</span><span class="token function">GetToken</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
<span class="token class-name">SpotifyWebAPI</span> api <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SpotifyWebAPI</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
TokenType <span class="token operator">=</span> token<span class="token punctuation">.</span>TokenType<span class="token punctuation">,</span>
|
||||
AccessToken <span class="token operator">=</span> token<span class="token punctuation">.</span>AccessToken
|
||||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||||
</code></pre></div></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/auth/client_credentials.md" target="_blank" rel="noopener noreferrer">Help us improve this page!</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">5/30/2020, 9:56:57 PM</span></div></footer> <!----> </main></div><div class="global-ui"></div></div>
|
||||
<script src="/SpotifyAPI-NET/assets/js/app.4310edfd.js" defer></script><script src="/SpotifyAPI-NET/assets/js/2.31113494.js" defer></script><script src="/SpotifyAPI-NET/assets/js/7.830f290b.js" defer></script>
|
||||
</body>
|
||||
</html>
|
@ -1,108 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>Getting Started | SpotifyAPI-NET</title>
|
||||
<meta name="description" content="🔉 An API for the Spotify-Client and the Spotify Web API, written in C#/.NET">
|
||||
<meta name="generator" content="VuePress 1.4.0">
|
||||
|
||||
|
||||
<link rel="preload" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css" as="style"><link rel="preload" href="/SpotifyAPI-NET/assets/js/app.4310edfd.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/2.31113494.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/8.9cb2269f.js" as="script"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/10.002ef499.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/11.7de40808.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/12.db52d3ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/13.8b5c9b44.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/14.c0f35def.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/15.cfa7a58a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/16.9c0ba2de.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/17.5154e8d9.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/18.6bcd5883.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/19.598a9a7a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/20.540a6f36.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/21.956153ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/22.a4edf47c.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/23.e0985451.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/24.a9466c6a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/25.33dd1a97.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/26.fd03eb58.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/3.7ef0fbfe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/4.2f270ddd.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/5.14f2fea3.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/6.66d7c2fe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/7.830f290b.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/9.f14800d8.js">
|
||||
<link rel="stylesheet" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/SpotifyAPI-NET/" class="home-link router-link-active"><!----> <span class="site-name">SpotifyAPI-NET</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link router-link-exact-active router-link-active">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link router-link-exact-active router-link-active">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>Getting Started</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/SpotifyAPI-NET/auth/getting_started.html#auth-methods" class="sidebar-link">Auth-Methods</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="getting-started"><a href="#getting-started" aria-hidden="true" class="header-anchor">#</a> Getting Started</h1> <h2 id="auth-methods"><a href="#auth-methods" aria-hidden="true" class="header-anchor">#</a> Auth-Methods</h2> <p>Before you can use the Web API's full functionality, you need the user to authenticate your Application.
|
||||
If you want to know more, you can read to the whole auth-process <a href="https://developer.spotify.com/web-api/authorization-guide/" target="_blank" rel="noopener noreferrer">here<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a>.</p> <p>Before you start, install <code>SpotifyAPI.Web.Auth</code> and create an application at Spotify: <a href="https://developer.spotify.com/my-applications/#!/applications" target="_blank" rel="noopener noreferrer">Your Applications<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></p> <p>After you have created your Application, you will have following important values:</p> <table><thead><tr><th>Name</th> <th>Description</th></tr></thead> <tbody><tr><td><strong>Client_Id</strong></td> <td>This is your client_id, you don't have to hide it</td></tr> <tr><td><strong>Client_Secret</strong></td> <td>Never use this in one of your client-side apps! Keep it secret!</td></tr> <tr><td><strong>Redirect URIs</strong></td> <td>Some of auth flows require that you set the correct redirect URI</td></tr></tbody></table> <p>Now you can start with the user-authentication. Spotify provides 3 ways (4 if you consider different implementations):</p> <ul><li><p><a href="/SpotifyAPI-NET/auth/implicit_grant.html">ImplicitGrantAuth</a></p></li> <li><p><a href="/SpotifyAPI-NET/auth/token_swap.html">TokenSwapAuth</a> (<strong>Recommended</strong>, server-side code mandatory, most secure method. The necessary code is shown here so you do not have to code it yourself.)</p></li> <li><p><a href="/SpotifyAPI-NET/auth/authorization_code.html">AutorizationCodeAuth</a> (Not recommended, server-side code needed, else it's unsecure)</p></li> <li><p><a href="/SpotifyAPI-NET/auth/client_credentials.html">ClientCredentialsAuth</a> (Not recommended, server-side code needed, else it's unsecure)</p></li></ul> <p>Overview:
|
||||
<img src="http://i.imgur.com/uf3ahTl.png" alt="Overview"></p></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/auth/getting_started.md" target="_blank" rel="noopener noreferrer">Help us improve this page!</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">5/30/2020, 9:56:57 PM</span></div></footer> <!----> </main></div><div class="global-ui"></div></div>
|
||||
<script src="/SpotifyAPI-NET/assets/js/app.4310edfd.js" defer></script><script src="/SpotifyAPI-NET/assets/js/2.31113494.js" defer></script><script src="/SpotifyAPI-NET/assets/js/8.9cb2269f.js" defer></script>
|
||||
</body>
|
||||
</html>
|
@ -1,128 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>ImplicitGrantAuth | SpotifyAPI-NET</title>
|
||||
<meta name="description" content="🔉 An API for the Spotify-Client and the Spotify Web API, written in C#/.NET">
|
||||
<meta name="generator" content="VuePress 1.4.0">
|
||||
|
||||
|
||||
<link rel="preload" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css" as="style"><link rel="preload" href="/SpotifyAPI-NET/assets/js/app.4310edfd.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/2.31113494.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/9.f14800d8.js" as="script"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/10.002ef499.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/11.7de40808.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/12.db52d3ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/13.8b5c9b44.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/14.c0f35def.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/15.cfa7a58a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/16.9c0ba2de.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/17.5154e8d9.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/18.6bcd5883.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/19.598a9a7a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/20.540a6f36.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/21.956153ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/22.a4edf47c.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/23.e0985451.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/24.a9466c6a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/25.33dd1a97.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/26.fd03eb58.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/3.7ef0fbfe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/4.2f270ddd.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/5.14f2fea3.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/6.66d7c2fe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/7.830f290b.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/8.9cb2269f.js">
|
||||
<link rel="stylesheet" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" data-server-rendered="true"><div class="theme-container no-sidebar"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/SpotifyAPI-NET/" class="home-link router-link-active"><!----> <span class="site-name">SpotifyAPI-NET</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link router-link-exact-active router-link-active">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link router-link-exact-active router-link-active">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>ImplicitGrantAuth</span> <!----></p> <!----></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="implicitgrantauth"><a href="#implicitgrantauth" aria-hidden="true" class="header-anchor">#</a> ImplicitGrantAuth</h1> <p>This way is <strong>recommended</strong> and the only auth-process which does not need a server-side exchange of keys. With this approach, you directly get a Token object after the user authed your application.
|
||||
You won't be able to refresh the token. If you want to use the internal Http server, please add "http://localhost:YOURPORT" to your application redirect URIs.</p> <p>More info: <a href="https://developer.spotify.com/documentation/general/guides/authorization-guide/#implicit-grant-flow" target="_blank" rel="noopener noreferrer">here<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></p> <div class="language-csharp extra-class"><pre class="language-csharp"><code><span class="token keyword">static</span> <span class="token keyword">async</span> <span class="token keyword">void</span> <span class="token function">Main</span><span class="token punctuation">(</span><span class="token keyword">string</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
<span class="token class-name">ImplicitGrantAuth</span> auth <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ImplicitGrantAuth</span><span class="token punctuation">(</span>
|
||||
_clientId<span class="token punctuation">,</span>
|
||||
<span class="token string">"http://localhost:4002"</span><span class="token punctuation">,</span>
|
||||
<span class="token string">"http://localhost:4002"</span><span class="token punctuation">,</span>
|
||||
Scope<span class="token punctuation">.</span>UserReadPrivate
|
||||
<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
auth<span class="token punctuation">.</span>AuthReceived <span class="token operator">+=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span>sender<span class="token punctuation">,</span> payload<span class="token punctuation">)</span> <span class="token operator">=></span>
|
||||
<span class="token punctuation">{</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">Stop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// `sender` is also the auth instance</span>
|
||||
<span class="token class-name">SpotifyWebAPI</span> api <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SpotifyWebAPI</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
TokenType <span class="token operator">=</span> payload<span class="token punctuation">.</span>TokenType<span class="token punctuation">,</span>
|
||||
AccessToken <span class="token operator">=</span> payload<span class="token punctuation">.</span>AccessToken
|
||||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||||
<span class="token comment">// Do requests with API client</span>
|
||||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">Start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Starts an internal HTTP Server</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">OpenBrowser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
<span class="token punctuation">}</span>
|
||||
</code></pre></div></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/auth/implicit_grant.md" target="_blank" rel="noopener noreferrer">Help us improve this page!</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">5/30/2020, 9:56:57 PM</span></div></footer> <!----> </main></div><div class="global-ui"></div></div>
|
||||
<script src="/SpotifyAPI-NET/assets/js/app.4310edfd.js" defer></script><script src="/SpotifyAPI-NET/assets/js/2.31113494.js" defer></script><script src="/SpotifyAPI-NET/assets/js/9.f14800d8.js" defer></script>
|
||||
</body>
|
||||
</html>
|
@ -1,158 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>TokenSwapAuth | SpotifyAPI-NET</title>
|
||||
<meta name="description" content="🔉 An API for the Spotify-Client and the Spotify Web API, written in C#/.NET">
|
||||
<meta name="generator" content="VuePress 1.4.0">
|
||||
|
||||
|
||||
<link rel="preload" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css" as="style"><link rel="preload" href="/SpotifyAPI-NET/assets/js/app.4310edfd.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/2.31113494.js" as="script"><link rel="preload" href="/SpotifyAPI-NET/assets/js/10.002ef499.js" as="script"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/11.7de40808.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/12.db52d3ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/13.8b5c9b44.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/14.c0f35def.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/15.cfa7a58a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/16.9c0ba2de.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/17.5154e8d9.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/18.6bcd5883.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/19.598a9a7a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/20.540a6f36.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/21.956153ac.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/22.a4edf47c.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/23.e0985451.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/24.a9466c6a.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/25.33dd1a97.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/26.fd03eb58.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/3.7ef0fbfe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/4.2f270ddd.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/5.14f2fea3.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/6.66d7c2fe.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/7.830f290b.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/8.9cb2269f.js"><link rel="prefetch" href="/SpotifyAPI-NET/assets/js/9.f14800d8.js">
|
||||
<link rel="stylesheet" href="/SpotifyAPI-NET/assets/css/0.styles.82abfbf9.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/SpotifyAPI-NET/" class="home-link router-link-active"><!----> <span class="site-name">SpotifyAPI-NET</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link router-link-exact-active router-link-active">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/SpotifyAPI-NET/" class="nav-link">
|
||||
Home
|
||||
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Web" class="dropdown-title"><span class="title">SpotifyAPI.Web</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/examples.html" class="nav-link">
|
||||
Examples
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/proxy.html" class="nav-link">
|
||||
Proxy
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/albums.html" class="nav-link">
|
||||
- Albums
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/artists.html" class="nav-link">
|
||||
- Artists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/browse.html" class="nav-link">
|
||||
- Browse
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/follow.html" class="nav-link">
|
||||
- Follow
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/library.html" class="nav-link">
|
||||
- Library
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/personalization.html" class="nav-link">
|
||||
- Personalization
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/player.html" class="nav-link">
|
||||
- Player
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/playlists.html" class="nav-link">
|
||||
- Playlists
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/profiles.html" class="nav-link">
|
||||
- Profiles
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/search.html" class="nav-link">
|
||||
- Search
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/tracks.html" class="nav-link">
|
||||
- Tracks
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/web/utils.html" class="nav-link">
|
||||
Utilities
|
||||
</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="SpotifyAPI.Auth" class="dropdown-title"><span class="title">SpotifyAPI.Auth</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/getting_started.html" class="nav-link">
|
||||
Getting Started
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/implicit_grant.html" class="nav-link">
|
||||
- ImplicitGrantAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/token_swap.html" class="nav-link router-link-exact-active router-link-active">
|
||||
- TokenSwapAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/authorization_code.html" class="nav-link">
|
||||
- AutorizationCodeAuth
|
||||
</a></li><li class="dropdown-item"><!----> <a href="/SpotifyAPI-NET/auth/client_credentials.html" class="nav-link">
|
||||
- ClientCredentialsAuth
|
||||
</a></li></ul></div></div> <a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||||
🚀 GitHub
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>TokenSwapAuth</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/SpotifyAPI-NET/auth/token_swap.html#using-tokenswapwebapifactory" class="sidebar-link">Using TokenSwapWebAPIFactory</a></li><li><a href="/SpotifyAPI-NET/auth/token_swap.html#using-tokenswapauth" class="sidebar-link">Using TokenSwapAuth</a></li><li><a href="/SpotifyAPI-NET/auth/token_swap.html#token-swap-endpoint" class="sidebar-link">Token Swap Endpoint</a></li><li><a href="/SpotifyAPI-NET/auth/token_swap.html#remarks" class="sidebar-link">Remarks</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="tokenswapauth"><a href="#tokenswapauth" aria-hidden="true" class="header-anchor">#</a> TokenSwapAuth</h1> <p>This way uses server-side code or at least access to an exchange server, otherwise, compared to other
|
||||
methods, it is impossible to use.</p> <p>With this approach, you provide the URI/URL to your desired exchange server to perform all necessary
|
||||
requests to Spotify, as well as requests that return back to the "server URI".</p> <p>The exchange server <strong>must</strong> be able to:</p> <ul><li>Return the authorization code from Spotify API authenticate page via GET request to the "server URI".</li> <li>Request the token response object via POST to the Spotify API token page.</li> <li>Request a refreshed token response object via POST to the Spotify API token page.</li></ul> <p><strong>The good news is that you do not need to code it yourself.</strong></p> <p>The advantages of this method are that the client ID and redirect URI are very well hidden and almost unexposed, but more importantly, your client secret is <strong>never</strong> exposed and is completely hidden compared to other methods (excluding <a href="/SpotifyWebAPI/auth#implicitgrantauth">ImplicitGrantAuth</a>
|
||||
as it does not deal with a client secret). This means
|
||||
your Spotify app <strong>cannot</strong> be spoofed by a malicious third party.</p> <h2 id="using-tokenswapwebapifactory"><a href="#using-tokenswapwebapifactory" aria-hidden="true" class="header-anchor">#</a> Using TokenSwapWebAPIFactory</h2> <p>The TokenSwapWebAPIFactory will create and configure a SpotifyWebAPI object for you.</p> <p>It does this through the method GetWebApiAsync <strong>asynchronously</strong>, which means it will not halt execution of your program while obtaining it for you. If you would like to halt execution, which is <strong>synchronous</strong>, use <code>GetWebApiAsync().Result</code> without using <strong>await</strong>.</p> <div class="language-csharp extra-class"><pre class="language-csharp"><code><span class="token class-name">TokenSwapWebAPIFactory</span> webApiFactory<span class="token punctuation">;</span>
|
||||
<span class="token class-name">SpotifyWebAPI</span> spotify<span class="token punctuation">;</span>
|
||||
|
||||
<span class="token comment">// You should store a reference to WebAPIFactory if you are using AutoRefresh or want to manually refresh it later on. New WebAPIFactory objects cannot refresh SpotifyWebAPI object that they did not give to you.</span>
|
||||
webApiFactory <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TokenSwapWebAPIFactory</span><span class="token punctuation">(</span><span class="token string">"INSERT LINK TO YOUR index.php HERE"</span><span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
Scope <span class="token operator">=</span> Scope<span class="token punctuation">.</span>UserReadPrivate <span class="token operator">|</span> Scope<span class="token punctuation">.</span>UserReadEmail <span class="token operator">|</span> Scope<span class="token punctuation">.</span>PlaylistReadPrivate<span class="token punctuation">,</span>
|
||||
AutoRefresh <span class="token operator">=</span> <span class="token keyword">true</span>
|
||||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||||
<span class="token comment">// You may want to react to being able to use the Spotify service.</span>
|
||||
<span class="token comment">// webApiFactory.OnAuthSuccess += (sender, e) => authorized = true;</span>
|
||||
<span class="token comment">// You may want to react to your user's access expiring.</span>
|
||||
<span class="token comment">// webApiFactory.OnAccessTokenExpired += (sender, e) => authorized = false;</span>
|
||||
|
||||
<span class="token keyword">try</span>
|
||||
<span class="token punctuation">{</span>
|
||||
spotify <span class="token operator">=</span> <span class="token keyword">await</span> webApiFactory<span class="token punctuation">.</span><span class="token function">GetWebApiAsync</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
<span class="token comment">// Synchronous way:</span>
|
||||
<span class="token comment">// spotify = webApiFactory.GetWebApiAsync().Result;</span>
|
||||
<span class="token punctuation">}</span>
|
||||
<span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> ex<span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
<span class="token comment">// Example way to handle error reporting gracefully with your SpotifyWebAPI wrapper</span>
|
||||
<span class="token comment">// UpdateStatus($"Spotify failed to load: {ex.Message}");</span>
|
||||
<span class="token punctuation">}</span>
|
||||
</code></pre></div><h2 id="using-tokenswapauth"><a href="#using-tokenswapauth" aria-hidden="true" class="header-anchor">#</a> Using TokenSwapAuth</h2> <p>Since the TokenSwapWebAPIFactory not only simplifies the whole process but offers additional functionality too
|
||||
(such as AutoRefresh and AuthSuccess AuthFailure events), use of this way is very verbose and is only
|
||||
recommended if you are having issues with TokenSwapWebAPIFactory or need access to the tokens.</p> <div class="language-csharp extra-class"><pre class="language-csharp"><code><span class="token class-name">TokenSwapAuth</span> auth <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TokenSwapAuth</span><span class="token punctuation">(</span>
|
||||
exchangeServerUri<span class="token punctuation">:</span> <span class="token string">"INSERT LINK TO YOUR index.php HERE"</span><span class="token punctuation">,</span>
|
||||
serverUri<span class="token punctuation">:</span> <span class="token string">"http://localhost:4002"</span><span class="token punctuation">,</span>
|
||||
scope<span class="token punctuation">:</span> Scope<span class="token punctuation">.</span>UserReadPrivate <span class="token operator">|</span> Scope<span class="token punctuation">.</span>UserReadEmail <span class="token operator">|</span> Scope<span class="token punctuation">.</span>PlaylistReadPrivate
|
||||
<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
auth<span class="token punctuation">.</span>AuthReceived <span class="token operator">+=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span>sender<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token operator">=></span>
|
||||
<span class="token punctuation">{</span>
|
||||
lastToken <span class="token operator">=</span> <span class="token keyword">await</span> auth<span class="token punctuation">.</span><span class="token function">ExchangeCodeAsync</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span>Code<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
|
||||
spotify <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SpotifyWebAPI</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||||
<span class="token punctuation">{</span>
|
||||
TokenType <span class="token operator">=</span> lastToken<span class="token punctuation">.</span>TokenType<span class="token punctuation">,</span>
|
||||
AccessToken <span class="token operator">=</span> lastToken<span class="token punctuation">.</span>AccessToken
|
||||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||||
|
||||
authenticated <span class="token operator">=</span> <span class="token keyword">true</span><span class="token punctuation">;</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">Stop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||||
auth<span class="token punctuation">.</span>OnAccessTokenExpired <span class="token operator">+=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span>sender<span class="token punctuation">,</span> e<span class="token punctuation">)</span> <span class="token operator">=></span> spotify<span class="token punctuation">.</span>AccessToken <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">await</span> auth<span class="token punctuation">.</span><span class="token function">RefreshAuthAsync</span><span class="token punctuation">(</span>lastToken<span class="token punctuation">.</span>RefreshToken<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>AccessToken<span class="token punctuation">;</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">Start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
auth<span class="token punctuation">.</span><span class="token function">OpenBrowser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||||
</code></pre></div><h2 id="token-swap-endpoint"><a href="#token-swap-endpoint" aria-hidden="true" class="header-anchor">#</a> Token Swap Endpoint</h2> <p>To keep your client secret completely secure and your client ID and redirect URI as secure as possible, use of a web server (such as a php website) is required.</p> <p>To use this method, an external HTTP Server (that you may need to create) needs to be able to supply the following HTTP Endpoints to your application:</p> <p><code>/swap</code> - Swaps out an <code>authorization_code</code> with an <code>access_token</code> and <code>refresh_token</code> - The following parameters are required in the JSON POST Body:</p> <ul><li><code>grant_type</code> (set to <code>"authorization_code"</code>)</li> <li><code>code</code> (the <code>authorization_code</code>)</li> <li><code>redirect_uri</code></li> <li><ul><li><strong>Important</strong> The page that the redirect URI links to must return the authorization code json to your <code>serverUri</code> (default is 'http://localhost:4002') but to the folder 'auth', like this: 'http://localhost:4002/auth'.</li></ul></li></ul> <p><code>/refresh</code> - Refreshes an <code>access_token</code> - The following parameters are required in the JSON POST Body:</p> <ul><li><code>grant_type</code> (set to <code>"refresh_token"</code>)</li> <li><code>refresh_token</code></li></ul> <p>The following open-source token swap endpoint code can be used for your website:</p> <ul><li><a href="https://github.com/rollersteaam/spotify-token-swap-php" target="_blank" rel="noopener noreferrer">rollersteaam/spotify-token-swap-php<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li> <li><a href="https://github.com/simontaen/SpotifyTokenSwap" target="_blank" rel="noopener noreferrer">simontaen/SpotifyTokenSwap<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li></ul> <h2 id="remarks"><a href="#remarks" aria-hidden="true" class="header-anchor">#</a> Remarks</h2> <p>It should be noted that GitHub Pages does not support hosting php scripts. Hosting php scripts through it will cause the php to render as plain HTML, potentially compromising your client secret while doing absolutely nothing.</p> <p>Be sure you have whitelisted your redirect uri in the Spotify Developer Dashboard otherwise the authorization will always fail.</p> <p>If you did not use the WebAPIFactory or you provided a <code>serverUri</code> different from its default, you must make sure your redirect uri's script at your endpoint will properly redirect to your <code>serverUri</code> (such as changing the areas which refer to <code>localhost:4002</code> if you had changed <code>serverUri</code> from its default), otherwise it will never reach your new <code>serverUri</code>.</p></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/auth/token_swap.md" target="_blank" rel="noopener noreferrer">Help us improve this page!</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <div class="last-updated"><span class="prefix">Last Updated:</span> <span class="time">5/30/2020, 9:56:57 PM</span></div></footer> <!----> </main></div><div class="global-ui"></div></div>
|
||||
<script src="/SpotifyAPI-NET/assets/js/app.4310edfd.js" defer></script><script src="/SpotifyAPI-NET/assets/js/2.31113494.js" defer></script><script src="/SpotifyAPI-NET/assets/js/10.002ef499.js" defer></script>
|
||||
</body>
|
||||
</html>
|
1
b5ab5f4e.e57ac380.js
Normal file
1
b5ab5f4e.e57ac380.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{136:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return a})),n.d(t,"metadata",(function(){return c})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return l}));var r=n(2),i=n(6),o=(n(0),n(151)),a={id:"unit_testing",title:"Unit Testing"},c={id:"unit_testing",title:"Unit Testing",description:"The modular structure of the library makes it easy to mock the API when unit testing. Consider the following method:",source:"@site/docs/unit_testing.md",permalink:"/docs/next/unit_testing",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/unit_testing.md",version:"next",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1591221448,sidebar:"docs",previous:{title:"Retry Handling",permalink:"/docs/next/retry_handling"},next:{title:"Introduction",permalink:"/docs/next/auth_introduction"}},s=[],u={rightToc:s};function l(e){var t=e.components,n=Object(i.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},u,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"The modular structure of the library makes it easy to mock the API when unit testing. Consider the following method:"),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-csharp"}),'public static async Task<bool> IsAdmin(IUserProfileClient userProfileClient)\n{\n // get loggedin user\n var user = await userProfileClient.Current();\n\n // only my user id is an admin\n return user.Id == "1122095781";\n}\n')),Object(o.b)("p",null,"Using ",Object(o.b)("inlineCode",{parentName:"p"},"Moq"),", this can be tested without doing any network requests:"),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-csharp"}),'[Test]\npublic async Task IsAdmin_SuccessTest()\n{\n var userProfileClient = new Mock<IUserProfileClient>();\n userProfileClient.Setup(u => u.Current()).Returns(\n Task.FromResult(new PrivateUser\n {\n Id = "1122095781"\n })\n );\n\n Assert.AreEqual(true, await IsAdmin(userProfileClient.Object));\n}\n')))}l.isMDXComponent=!0},151:function(e,t,n){"use strict";n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return b}));var r=n(0),i=n.n(r);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=i.a.createContext({}),l=function(e){var t=i.a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},p=function(e){var t=l(e.components);return i.a.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},f=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,a=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(n),f=r,b=p["".concat(a,".").concat(f)]||p[f]||d[f]||o;return n?i.a.createElement(b,c({ref:t},u,{components:n})):i.a.createElement(b,c({ref:t},u))}));function b(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,a=new Array(o);a[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:r,a[1]=c;for(var u=2;u<o;u++)a[u]=n[u];return i.a.createElement.apply(null,a)}return i.a.createElement.apply(null,n)}f.displayName="MDXCreateElement"}}]);
|
1
bbb8f1f8.1db3f054.js
Normal file
1
bbb8f1f8.1db3f054.js
Normal file
File diff suppressed because one or more lines are too long
2
c4f5d8e4.de5d3f71.js
Normal file
2
c4f5d8e4.de5d3f71.js
Normal file
File diff suppressed because one or more lines are too long
5
c4f5d8e4.de5d3f71.js.LICENSE.txt
Normal file
5
c4f5d8e4.de5d3f71.js.LICENSE.txt
Normal file
@ -0,0 +1,5 @@
|
||||
/*!
|
||||
* github-buttons v2.8.0
|
||||
* (c) 2020 なつき
|
||||
* @license BSD-2-Clause
|
||||
*/
|
1
c6c6e257.6f3fcdf4.js
Normal file
1
c6c6e257.6f3fcdf4.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{139:function(e){e.exports=JSON.parse('{"docsSidebars":{"docs":[{"type":"category","label":"SpotifyAPI-NET","items":[{"type":"link","label":"Introduction","href":"/docs/next/introduction"},{"type":"link","label":"Getting Started","href":"/docs/next/getting_started"},{"type":"category","label":"Guides","items":[{"type":"link","label":"Error Handling","href":"/docs/next/error_handling"},{"type":"link","label":"Configuration","href":"/docs/next/configuration"},{"type":"link","label":"Logging","href":"/docs/next/logging"},{"type":"link","label":"Proxy","href":"/docs/next/proxy"},{"type":"link","label":"Pagination","href":"/docs/next/pagination"},{"type":"link","label":"Retry Handling","href":"/docs/next/retry_handling"},{"type":"link","label":"Unit Testing","href":"/docs/next/unit_testing"}]},{"type":"category","label":"Authentication Guides","items":[{"type":"link","label":"Introduction","href":"/docs/next/auth_introduction"},{"type":"link","label":"Client Credentials","href":"/docs/next/client_credentials"},{"type":"link","label":"Implicit Grant","href":"/docs/next/implicit_grant"},{"type":"link","label":"Authorization Code","href":"/docs/next/authorization_code"},{"type":"link","label":"Token Swap","href":"/docs/next/token_swap"}]},{"type":"link","label":"Showcase","href":"/docs/next/showcase"},{"type":"category","label":"Examples","items":[{"type":"link","label":"ASP.NET","href":"/docs/next/example_asp"},{"type":"link","label":"Blazor WASM","href":"/docs/next/example_blazor_wasm"},{"type":"link","label":"Blazor ServerSide","href":"/docs/next/example_blazor"},{"type":"link","label":"CLI - Custom HTML","href":"/docs/next/example_cli_custom_html"},{"type":"link","label":"CLI - Persistent Config","href":"/docs/next/example_cli_persistent_config"},{"type":"link","label":"Token Swap","href":"/docs/next/example_token_swap"},{"type":"link","label":"UWP","href":"/docs/next/example_uwp"}]}]}]},"permalinkToSidebar":{"/docs/next/auth_introduction":"docs","/docs/next/authorization_code":"docs","/docs/next/client_credentials":"docs","/docs/next/configuration":"docs","/docs/next/error_handling":"docs","/docs/next/example_asp":"docs","/docs/next/example_blazor":"docs","/docs/next/example_blazor_wasm":"docs","/docs/next/example_cli_custom_html":"docs","/docs/next/example_cli_persistent_config":"docs","/docs/next/example_token_swap":"docs","/docs/next/example_uwp":"docs","/docs/next/getting_started":"docs","/docs/next/implicit_grant":"docs","/docs/next/introduction":"docs","/docs/next/logging":"docs","/docs/next/pagination":"docs","/docs/next/proxy":"docs","/docs/next/retry_handling":"docs","/docs/next/showcase":"docs","/docs/next/token_swap":"docs","/docs/next/unit_testing":"docs"},"version":"next"}')}}]);
|
1
cd5a7ece.1d2e5268.js
Normal file
1
cd5a7ece.1d2e5268.js
Normal file
@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{140:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return c})),n.d(t,"rightToc",(function(){return p})),n.d(t,"default",(function(){return u}));var r=n(2),o=n(6),a=(n(0),n(151)),i={id:"proxy",title:"Proxy"},c={id:"proxy",title:"Proxy",description:"The included HTTPClient has full proxy configuration support:",source:"@site/docs/proxy.md",permalink:"/docs/next/proxy",editUrl:"https://github.com/JohnnyCrazy/SpotifyAPI-NET/edit/master/SpotifyAPI.Docs/docs/proxy.md",version:"next",lastUpdatedBy:"Jonas Dellinger",lastUpdatedAt:1591199053,sidebar:"docs",previous:{title:"Logging",permalink:"/docs/next/logging"},next:{title:"Pagination",permalink:"/docs/next/pagination"}},p=[],l={rightToc:p};function u(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"The included ",Object(a.b)("inlineCode",{parentName:"p"},"HTTPClient")," has full proxy configuration support:"),Object(a.b)("pre",null,Object(a.b)("code",Object(r.a)({parentName:"pre"},{className:"language-csharp"}),'var httpClient = new NetHttpClient(new ProxyConfig("localhost", 8080)\n{\n User = "",\n Password = "",\n SkipSSLCheck = false,\n});\nvar config = SpotifyClientConfig\n .CreateDefault()\n .WithHTTPClient(httpClient);\n\nvar spotify = new SpotifyClient(config);\n')),Object(a.b)("p",null,"As an example, ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://mitmproxy.org/"}),"mitmproxy")," can be used to inspect the requests and responses:"),Object(a.b)("p",null,Object(a.b)("img",Object(r.a)({parentName:"p"},{src:"/img/mitmproxy.png",alt:"mitmproxy"}))))}u.isMDXComponent=!0},151:function(e,t,n){"use strict";n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return b}));var r=n(0),o=n.n(r);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=o.a.createContext({}),u=function(e){var t=o.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},s=function(e){var t=u(e.components);return o.a.createElement(l.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},y=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),s=u(n),y=r,b=s["".concat(i,".").concat(y)]||s[y]||f[y]||a;return n?o.a.createElement(b,c({ref:t},l,{components:n})):o.a.createElement(b,c({ref:t},l))}));function b(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=y;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var l=2;l<a;l++)i[l]=n[l];return o.a.createElement.apply(null,i)}return o.a.createElement.apply(null,n)}y.displayName="MDXCreateElement"}}]);
|
1
d0e245df.b48e7ade.js
Normal file
1
d0e245df.b48e7ade.js
Normal file
File diff suppressed because one or more lines are too long
1
d85a39be.3f22a2a2.js
Normal file
1
d85a39be.3f22a2a2.js
Normal file
File diff suppressed because one or more lines are too long
1
dd053733.c88a3048.js
Normal file
1
dd053733.c88a3048.js
Normal file
File diff suppressed because one or more lines are too long
37
docs/auth/authorization_code/index.html
Normal file
37
docs/auth/authorization_code/index.html
Normal file
File diff suppressed because one or more lines are too long
33
docs/auth/client_credentials/index.html
Normal file
33
docs/auth/client_credentials/index.html
Normal file
File diff suppressed because one or more lines are too long
33
docs/auth/getting_started/index.html
Normal file
33
docs/auth/getting_started/index.html
Normal file
File diff suppressed because one or more lines are too long
32
docs/auth/implicit_grant/index.html
Normal file
32
docs/auth/implicit_grant/index.html
Normal file
File diff suppressed because one or more lines are too long
41
docs/auth/token_swap/index.html
Normal file
41
docs/auth/token_swap/index.html
Normal file
File diff suppressed because one or more lines are too long
32
docs/home/index.html
Normal file
32
docs/home/index.html
Normal file
File diff suppressed because one or more lines are too long
31
docs/next/auth_introduction/index.html
Normal file
31
docs/next/auth_introduction/index.html
Normal file
File diff suppressed because one or more lines are too long
40
docs/next/authorization_code/index.html
Normal file
40
docs/next/authorization_code/index.html
Normal file
File diff suppressed because one or more lines are too long
35
docs/next/client_credentials/index.html
Normal file
35
docs/next/client_credentials/index.html
Normal file
File diff suppressed because one or more lines are too long
34
docs/next/configuration/index.html
Normal file
34
docs/next/configuration/index.html
Normal file
File diff suppressed because one or more lines are too long
31
docs/next/error_handling/index.html
Normal file
31
docs/next/error_handling/index.html
Normal file
File diff suppressed because one or more lines are too long
34
docs/next/example_asp/index.html
Normal file
34
docs/next/example_asp/index.html
Normal file
File diff suppressed because one or more lines are too long
33
docs/next/example_blazor/index.html
Normal file
33
docs/next/example_blazor/index.html
Normal file
File diff suppressed because one or more lines are too long
33
docs/next/example_blazor_wasm/index.html
Normal file
33
docs/next/example_blazor_wasm/index.html
Normal file
File diff suppressed because one or more lines are too long
31
docs/next/example_cli_custom_html/index.html
Normal file
31
docs/next/example_cli_custom_html/index.html
Normal file
File diff suppressed because one or more lines are too long
31
docs/next/example_cli_persistent_config/index.html
Normal file
31
docs/next/example_cli_persistent_config/index.html
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user