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
      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
                                        • T
                                          thelta Member @Bruhtek
                                          last edited by thelta

                                          @Bartek
                                          Yeah, I also couldn't manage to work with json. However, with protoc --decode_raw you can easily parse it. The protobuf format is probably something like this.

                                          message Ttl
                                          {
                                            int64 ttl_seconds = 1;
                                          }
                                          message AuthSession 
                                          {
                                            string token = 1;
                                            Ttl ttl_seconds = 2;
                                            google.protobuf.Timestamp timestamp = 3;
                                          }
                                          

                                          Token size is 56 characters.

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

                                            @thelta @Bartek this is fixed, please try again

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