Jump to content

aziell

Member
  • Posts

    1
  • Joined

  • Last visited

Posts posted by aziell

    API

    Solange die Webseite nicht stillgelegt wird, wird man Kodi nie aussperren können.

    Der Aufwand ist nur größer geworden:

    Ein bisschen smali verstehen für die keys ( ...wenn man sie den braucht) und z.B. 2captcha tut den Rest.

    Die Frage ist ob sowas jemals public wird.

    • Like 1
  1. vor 7 Stunden schrieb fepilins:

    Ich habe in der main.py in der Funktion showVideo mal folgendes eingebaut:

    print data['fullurl'].encode('utf8')

    Im Log steht dann

    09:31:21 T:18112   DEBUG: javascript:alert('Nicht möglich');

    In der Funktion getURL habe ich ebenfalls mal eine Ausgabe eingebaut:

    DEBUG: {"hoster":"OpenLoad","url":"gx0N-FaEibg\/Shameless.S06E03.Abgeraeumt.GERMAN.DUBBED.WS.HDTVRip.x264-TVP.mkv","part":"1","epi":"152037","fullurl":"javascript:alert('Nicht m\u00f6glich');"}

    Das Problem ist also, dass die API die fullurl garnicht liefert... weiß jemand warum?

     

    if 'openload' in data['hoster'].lower():
            videoLink = urlresolver.resolve('https://openload.co/embed/' + data['url'])
    else:
            videoLink = urlresolver.resolve(data['fullurl'])

     

  2. Kleine Hilfe

    https://aziell.de/wp-content/uploads/2016/09/1.0.0_script.module.AZresolverPub.zip

    installieren (Powerwatch, Vivo,Youwatch).

    Im BS Addon:

    main.py:

    import urlresolver durch import AZresolverPub as urlresolver ersetzen.

    addon.xml:

    <import addon="script.module.urlresolver"/> durch <import addon="script.module.AZresolverPub"/> ersetzen.

    ggf.  Addons*.db löchen und Kodi neu starten.

     

    • Like 1
  3. Wenn du vielleicht doch mal auf die kommen solltes, abseits was von .Net zu probieren gebe ich dir mal ein Beispiel wie das mit der API in QT aussehen könnte.

    #ifndef BS_API_H
    #define BS_API_H
    
    #include <QObject>
    #include <QNetworkAccessManager>
    #include <QNetworkRequest>
    #include <QNetworkReply>
    #include <QEventLoop>
    #include <QMessageAuthenticationCode>
    #include <QUrlQuery>
    #include <QJsonDocument>
    #include <QJsonObject>
    #include <QJsonArray>
    #include <QThread>
    #include <QDebug>
    #include <QDateTime>
    
    class bs_api : public QObject
    {
        Q_OBJECT
    public:
        explicit bs_api(QObject *parent = 0);
        virtual ~bs_api();
    
        QString getData(QString url, QUrlQuery send);
        QString base64_encode(QString string);
    
        QJsonDocument get_series();
        QJsonDocument get_series_genre();
        QJsonDocument get_episode(QString id,QString season,QString user_session);
        QJsonDocument get_episode_info(QString id,QString season,QString episode,QString user_session);
        QJsonDocument get_link(QString linkid,QString user_session);
        QJsonDocument set_unwatch(QString episodeid,QString user_session);
    
        QJsonDocument get_favorites(QString user_session);
        QJsonDocument set_favorites(QString ids,QString user_session);
    
        QJsonDocument get_user_session(QString user,QString pass);
    
    public slots:
        void load_finished(QNetworkReply* reply);
    private:
        QNetworkAccessManager *manager;
        QNetworkReply *reply;
        QString json_data;
    };
    
    #endif // BS_API_H
    
    ---------------------------------------------------
    
    #include "bs_api.h"
    
    bs_api::bs_api(QObject *parent) :
        QObject(parent)
    {
        manager = new QNetworkAccessManager;
    }
    
    bs_api::~bs_api()
    {
        manager->deleteLater();
    }
    
    QString bs_api::base64_encode(QString string){
        QByteArray ba;
        ba.append(string);
        return ba.toBase64();
    }
    
    QString bs_api::getData(QString url, QUrlQuery send)
    {
        QString host = "https://bs.to/api";
    
        qint64 utime(QDateTime::currentMSecsSinceEpoch());
        utime = utime / 1000;
    
        QString public_key = "***";
        QByteArray secret_key = "***";
        QString msg = QString::number(utime) + "/" + url;
        QByteArray message = msg.toUtf8();
        QMessageAuthenticationCode code(QCryptographicHash::Sha256);
        code.setKey(secret_key);
        code.addData(message);
        QString hmac = code.result().toHex();
        QString full = "{\"public_key\": \"" + public_key + "\", \"hmac\": \"" + hmac + "\", \"timestamp\": \"" + QString::number(utime) + "\"}";
    
        QString token1 = base64_encode(full);
    
        QByteArray array = token1.toLocal8Bit();
        char* token = array.data();
    
        QUrl qurl(host + "/" + url);
        QEventLoop loop;
    
        QNetworkRequest request;
        request.setUrl(qurl);
        request.setRawHeader( "User-Agent" , "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3" );
        request.setRawHeader( "BS-Token" , token );
        request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    
        reply = manager->post(request,send.toString(QUrl::FullyEncoded).toUtf8());
    
        connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
        connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(load_finished(QNetworkReply*)));
        loop.exec();
        QThread::msleep(500);
        return json_data;
    }
    
    void bs_api::load_finished(QNetworkReply *reply)
    {
        if (reply->error() == QNetworkReply::NoError)
        {
            json_data = reply->readAll();
            qDebug() << "### Data read";
        }
        else
        {
            json_data = "Error";
            qDebug() << "### Error";
        }
    }
    
    QJsonDocument bs_api::get_series(){
    
        QUrlQuery postData;
        QString data = getData("series",postData);
        data = "{\"root\":" + data + "}";
        QJsonDocument jdoc = QJsonDocument::fromJson(data.toUtf8());
    
        return jdoc;
    }
    
    QJsonDocument bs_api::get_series_genre(){
    
        QUrlQuery postData;
        QString data = getData("series:genre",postData);
        QJsonDocument jdoc = QJsonDocument::fromJson(data.toUtf8());
    
        return jdoc;
    }
    
    QJsonDocument bs_api::get_episode(QString id,QString season,QString user_session){...}
    QJsonDocument bs_api::get_episode_info(QString id,QString season,QString episode,QString user_session){...}
    QJsonDocument bs_api::get_link(QString linkid,QString user_session){...}
    QJsonDocument bs_api::set_unwatch(QString episodeid,QString user_session){...}
    QJsonDocument bs_api::get_favorites(QString user_session){...}
    QJsonDocument bs_api::set_favorites(QString ids,QString user_session){...}
    QJsonDocument bs_api::get_user_session(QString user,QString pass){
    
        QUrlQuery postData;
        postData.addQueryItem("login[user]",user);
        postData.addQueryItem("login[pass]",pass);
        QString url = "login";
        QString data = getData(url,postData);
        QJsonDocument jdoc = QJsonDocument::fromJson(data.toUtf8());
    
        return jdoc;
    }

    Komplizierter als in .Net ist es auf jeden Fall nicht. Mit Java Swing wäre es wahrscheinlich genau so einfach. Vorteil ist natürlich Cross-Plattform inkl. Android.

×
×
  • Create New...