J-Novel Club
    • Categories
    • Recent
    • Tags
    • Users
    • Login

    Developer PSA: labs.j-novel.club is your new friend!

    Scheduled Pinned Locked Moved Suggestions & Feedback
    81 Posts 25 Posters 30.9k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • chocolatkeyC
      chocolatkey Staff @Crimson Wise
      last edited by chocolatkey

      @crimson-wise The reason there's no volume ID attached to that even is that we would actually have to figure out the volume of each event based on slug lookup, because it's not "attached" in the database, and that's inefficient to do right now, especially for large calendar queries

      1 Reply Last reply Reply Quote 1
      • chocolatkeyC
        chocolatkey Staff
        last edited by

        Added the following to the list:

        GET https://labs.j-novel.club/app/v1/volumes/{ID or slug}/skus // Volume's third-party purchase options
        GET https://labs.j-novel.club/app/v1/volumes/{ID or slug}/price // Volume's pricing on JNC
        POST https://labs.j-novel.club/app/v1/me/credits/convert // Convert credits to coins
        POST https://labs.j-novel.club/app/v1/me/coins/purchase // Purchase coins
        POST https://labs.j-novel.club/app/v1/me/coins/redeem/{ID or slug} // Redeem coins by volume slug or ID
        GET https://labs.j-novel.club/app/v1/me/coins/options // Get coin pricing options
        

        Astute API users will notice that some more endpoints have been removed from the old API

        1 Reply Last reply Reply Quote 0
        • chocolatkeyC
          chocolatkey Staff
          last edited by

          Added GET https://labs.j-novel.club/app/v1/me/history. Required a from and until query parameter with unix timestamps. Lowest acceptable value for either is 1448841600

          1 Reply Last reply Reply Quote 0
          • kualiK
            kuali Premium Member
            last edited by

            Is there any way to track when a manga volume was last updated or downloaded? For regular ebooks, /me/library has the lastDownload and lastUpdated fields, but I can't spot anything equivalent for manga.

            https://forums.j-novel.club/topic/6701/omnibus-builder
            https://forums.j-novel.club/topic/5745/ascendance-of-a-bookworm-omnibus-editions

            The Primal Desires: Food, Sleep, Sex, StroZero, Hypnotism, and Awayuki Kokorone.

            Item Diaria Apothecaria legi debent.

            1 Reply Last reply Reply Quote 0
            • T
              talisein Premium Member
              last edited by

              It'd be great if the me/library's book.download object had a crc32 or any kind of hash. Even just the content length if nothing else; I tried HEADing the download link but there's no size in the headers even.

              chocolatkeyC 1 Reply Last reply Reply Quote 0
              • chocolatkeyC
                chocolatkey Staff @talisein
                last edited by

                @talisein that's because the ebooks are generated on the fly as they're downloaded. Some sort of etag-equivalent unrelated to the content of the final ebook you download maybe be a possibility in the future, but it will probably never be a checksum of the content itself

                1 Reply Last reply Reply Quote 0
                • chocolatkeyC
                  chocolatkey Staff @yanrishatum
                  last edited by chocolatkey

                  @yanrishatum

                  Have to also note about /parts/$id/toc not making sense, as it clearly should be /series/$id/toc / /series/$id/parts

                  I know, it's weird. It's a quirk of dealing with the current database and how everything is connected, and it's just easier/more efficient for now to say "I am currently reading this part and I want the TOC for its series" for the mobile app, for which this API was originally designed for. We'll have a better TOC API in the future, probably /v2

                  Regarding your suggestion for accepted content-type, I'll look into it, first I have to make sure it doesn't break any of the clients

                  1 Reply Last reply Reply Quote 0
                  • chocolatkeyC
                    chocolatkey Staff
                    last edited by

                    Added the following to the list:

                    PUT https://labs.j-novel.club/app/v1/me
                    GET/POST https://labs.j-novel.club/app/v1/me/subscription
                    POST https://labs.j-novel.club/app/v1/me/subscription/sync
                    POST/DELETE https://labs.j-novel.club/app/v1/me/subscription/cancel
                    POST https://labs.j-novel.club/app/v1/me/subscription/estimate
                    GET/DELETE/PUT https://labs.j-novel.club/app/v1/me/method
                    GET https://labs.j-novel.club/app/v1/me/method/setup
                    

                    Subscription management through the old API is no longer supported, and may be removed at any time.

                    P.S. I'm getting tired of updating/maintaining this list, it will soon be time for proper API docs, currently researching the most appropriate/best docs generator.

                    1 Reply Last reply Reply Quote 1
                    • RanR
                      Ran @chocolatkey
                      last edited by

                      Thanks for making all this available, even unofficially -- if you add proper API docs that'll be more than some major companies provide for official partners. :)

                      Speaking of APIs ...
                      @chocolatkey said in Developer PSA: labs.j-novel.club is your new friend!:

                      POST https://labs.j-novel.club/app/v1/me/coins/purchase

                      Knowing the kind of parameters each takes would be really helpful -- it's a lot harder to work backwards with protobufs!

                      chocolatkeyC 1 Reply Last reply Reply Quote 0
                      • chocolatkeyC
                        chocolatkey Staff @Ran
                        last edited by chocolatkey

                        @Ran Yeah protobufs docs is also part of what I want to expose... For now have this, you POST it a PurchaseRequest

                        message StripePaymentIntent {
                            string payment_method = 1;
                            string payment_intent = 2;
                        }
                        
                        message PurchaseRequest {
                            enum Processor {
                                DEBUG = 0; // Only works when debug mode is enabled on the server
                                STRIPE = 1; // Stripe
                                // Insert app payment processors here!
                            }
                            Processor processor = 1; // The payment processor to use
                            uint32 amount = 2; // The amount of coins to purchase
                            oneof intent { // The payment intent from the processor
                                StripePaymentIntent stripe_payment_intent = 3;
                            }
                        }
                        

                        If I remember correctly the enum values need to use the names in JSON, so "processor":"STRIPE"

                        RanR 1 Reply Last reply Reply Quote 1
                        • RanR
                          Ran @chocolatkey
                          last edited by

                          @chocolatkey Awesome, thanks! That's exactly what I needed. You were totally right about the enum name -- and I would never have figured out how to pass along the payment intent without seeing the protos laid out like that.

                          1 Reply Last reply Reply Quote 0
                          • chocolatkeyC
                            chocolatkey Staff
                            last edited by chocolatkey

                            Added a new GET https://labs.j-novel.club/app/v1/series/{ID or slug}/aggregate , to get all data regarding a series (series, volumes, parts). Should be identical to making the individual requests

                            1 Reply Last reply Reply Quote 3
                            • chocolatkeyC
                              chocolatkey Staff
                              last edited by

                              Added "status" to series, which can be (in JSON format) one of "DEFAULT", "COMPLETE", "HIATUS"

                              1 Reply Last reply Reply Quote 2
                              • BruhtekB
                                Bruhtek Member
                                last edited by

                                Is it possible to get some pointers on the /parts/$slug/data endpoint? Light novel data is simple enough with /embed/$slug/data.xhtml, but doesn't work for manga. I am trying to get manga parts, but have no idea where to even start decoding the response.

                                chocolatkeyC 1 Reply Last reply Reply Quote 1
                                • chocolatkeyC
                                  chocolatkey Staff @Bruhtek
                                  last edited by

                                  @Bartek The manga parts currently have DRM due to the stipulations of the original publisher(s). There is, therefore, no documentation on how to decode and display manga data

                                  BruhtekB 1 Reply Last reply Reply Quote 1
                                  • BruhtekB
                                    Bruhtek Member @chocolatkey
                                    last edited by

                                    @chocolatkey Ah, too bad!

                                    1 Reply Last reply Reply Quote 1
                                    • T
                                      TailsxKyuubi Premium Member
                                      last edited by

                                      My question is regarding the covers. is there any reason, that the field originalUrl is always empty? i would need the cover in a higher resolution.

                                      chocolatkeyC 1 Reply Last reply Reply Quote 0
                                      • chocolatkeyC
                                        chocolatkey Staff @TailsxKyuubi
                                        last edited by

                                        @TailsxKyuubi Because we don't actually have any original uploaded right now, it's planned for the future although I think that structure may change before then

                                        T 1 Reply Last reply Reply Quote 0
                                        • T
                                          TailsxKyuubi Premium Member @chocolatkey
                                          last edited by

                                          @chocolatkey i dont understand the problem. they are already in some way uploaded. the ebooks itself already have the cover wouldnt it be possible to upload this in a automated process?

                                          1 Reply Last reply Reply Quote 0
                                          • BruhtekB
                                            Bruhtek Member
                                            last edited by

                                            Does the /auth/otp4app/check not accept format=json query? It works with /auth/otp4app/generate/, but for some reason not with the check one. From a decoder, all I can guess is that it returns some kind of token starting with otp_, and 3 numbers? Could we get some more info on how to login using the OTP code?

                                            T 1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 1 / 5
                                            • First post
                                              Last post