DeviantArtFs 9.2.0-beta1

This is a prerelease version of DeviantArtFs.
There is a newer version of this package available.
See the version list below for details.
dotnet add package DeviantArtFs --version 9.2.0-beta1                
NuGet\Install-Package DeviantArtFs -Version 9.2.0-beta1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DeviantArtFs" Version="9.2.0-beta1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DeviantArtFs --version 9.2.0-beta1                
#r "nuget: DeviantArtFs, 9.2.0-beta1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DeviantArtFs as a Cake Addin
#addin nuget:?package=DeviantArtFs&version=9.2.0-beta1&prerelease

// Install DeviantArtFs as a Cake Tool
#tool nuget:?package=DeviantArtFs&version=9.2.0-beta1&prerelease                

DeviantArtFs

A .NET / F# library to interact with the DeviantArt / Sta.sh API.

Design

Each request that can be made to DeviantArt is represented by a function in one of the modules (static classes) in the DeviantArtFs.Api namespace. Each static method takes an IDeviantArtAccessToken as its first parameter. Most methods have additional parameters, many of which are discriminated unions; hopefully this makes it easy to see exactly what your code is doing and ensures that parameters can't get mixed up.

In some cases, two methods are available for an API call. Functions whose names begin with Page will return a single page of results, while the corresponding Get function will return an asynchronous sequence which begins at the offset you specify (see "Interoperability" below). Be careful not to request too much data or you might hit API usage limits.

Interoperability

In order to maximize ease of use from within F#, the response objects in this library are .NET records using F# option types to represent missing fields. You can interact with option types from C# / VB.Net using FSharpOption<T> and OptionModule, but it may be easier to use extension methods (see below) when working with these values.

The following types are used in response objects:

  • FSharpOption<T>: Used to represent fields that may be missing or null on the response object. Extension methods (see below) allow C# and VB.NET users to extract these values by converting None to null or to an empty list.
  • FSharpList<T>: An immutable linked list. Implements IReadOnlyList<T> and IEnumerable<T>, so other .NET languages can use foreach, LINQ, or access the list's properties directly.

The following extension methods are provided in the namespace DeviantArtFs.Extensions:

  • .OrNull(): converts an option type to an equivalent nullable type
  • .IsTrue(): checks whether a bool option type (which might be true, false, or None) is true
  • .IsFalse(): checks whether a bool option type (which might be true, false, or None) is false
  • .OrEmpty(): returns the items in the list, or an empty list if the field is None

Optional parameters

Optional parameters for object expansion, ext_params, and mature content filtering must be included through the token object. Use the interface IDeviantArtAccessTokenWithOptionalParameters and include the optional parameters in the OptionalParameters property; for example:

member _.OptionalParameters = [
    OptionalParameter.Expansion [Expansion.UserProfile]
    OptionalParameter.ExtParam ExtParam.Collection
    OptionalParameter.MatureContent true
]

or:

public IEnumerable<OptionalParameter> OptionalParameters => new OptionalParameter[] {
    OptionalParameter.NewExpansion(Expansion.UserProfile),
    OptionalParameter.NewExtParam(ExtParam.Gallery),
    OptionalParameter.NewMatureContent(true)
}

Deleted deviations and status updates

Deviation and DeviantArtStatus objects can represent a deviation or status update that has been deleted; this is why most of the fields on those two types are marked optional. Check the is_deleted field before attempting to access any of the other fields.

Known issues

  • The profile_pic field in the user.profile expansion is not supported due to circular type definitions. Get it from the full profile object instead.
  • The tier.stats field is not supported due to serialization issues on DeviantArt's end (the empty object {} can be rendered as [] by the server).
  • The api_session return object is not supported.

Examples

  • ExampleConsoleApp: An F# console application that shows some data on the current user's recent (and not-so-recent) submissions, along with some of their Sta.sh info. Reads the access token interactively from standard input.
  • ExampleConsoleApp3: An F# console application that submits a picture to Sta.sh and then publishes it to DeviantArt.
  • GalleryViewer: A VB.NET app that lets you see the "All" view of someone's gallery and read the descriptions of individual submissions. Uses the Client Credentials grant and stores tokens in a file.
  • WebApp: An ASP.NET Core app written in C# that lets you view someone's gallery folders and corresponding submission thumbnails. Uses the Client Credentials grant and stores tokens in a database.

Authentication

See also: https://www.deviantart.com/developers/authentication

The DeviantArtAuth module provides methods to support the Authorization Code grant type (getting tokens from an authorization code and refreshing tokens).

If you are writing a Windows desktop application, the package DeviantArtFs.WinForms package uses Internet Explorer to provide a way to get a code or token from the user.

If you need to store the access token somewhere (such as in a database or file), you may want to create your own class that implements the IDeviantArtAccessToken or IDeviantArtRefreshableAccessToken interface. Using the latter will allow DeviantArtFs to automatically refresh the token and store the new value when it recieves an HTTP 401 response.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Framework net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on DeviantArtFs:

Package Downloads
DeviantArtFs.Stash.Marshal

An F#/.NET library to interact with the Sta.sh API and manage state (.NET Standard 2.0)

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
11.0.0 80 10/28/2024
11.0.0-beta2 66 10/28/2024
10.1.0-beta2 89 10/20/2024
10.1.0-beta1 73 9/21/2024
10.0.0 122 8/8/2024
10.0.0-rc1 95 8/8/2024
9.2.1-rc1 79 8/7/2024
9.2.0 108 6/19/2024
9.2.0-beta1 94 6/19/2024
9.1.1 120 4/27/2024
9.1.0-rc1 210 11/27/2023
9.0.0 271 11/22/2023
9.0.0-beta4 142 5/30/2023
9.0.0-beta2 108 5/28/2023
8.0.0 463 5/30/2021
8.0.0-beta4 280 5/30/2021
8.0.0-beta3 334 5/30/2021
8.0.0-beta2 235 5/30/2021
7.0.1 402 1/11/2021
7.0.0 381 1/9/2021
7.0.0-beta1 293 1/9/2021
6.0.2 366 1/5/2021
6.0.1 432 12/28/2020
6.0.0 343 12/27/2020
6.0.0-beta2 328 12/26/2020
6.0.0-beta1 320 12/26/2020
5.0.0 517 2/11/2020
5.0.0-beta1 435 2/11/2020
4.0.0 503 1/23/2020
4.0.0-beta2 450 1/23/2020
4.0.0-beta1 459 1/22/2020
3.0.0 552 1/17/2020
2.2.0 555 1/6/2020
2.1.0 531 9/9/2019
2.0.0-beta3 504 3/9/2019
2.0.0-beta2 483 3/8/2019
2.0.0-beta1 478 3/6/2019
1.1.0-beta1 473 3/5/2019
1.0.0 700 2/10/2019
0.9.0 1,349 1/29/2019
0.8.0 692 1/28/2019
0.7.3 714 1/22/2019
0.7.2 693 1/22/2019
0.7.1 1,356 1/19/2019
0.7.0 728 1/18/2019
0.6.0 1,388 1/14/2019
0.5.0 1,358 1/11/2019
0.4.0 1,380 1/3/2019
0.3.0 1,383 12/31/2018
0.2.0-alpha 1,182 12/27/2018
0.1.0-alpha 618 12/21/2018