Difference between revisions of "SOAP API"
(→iOS) |
(→iOS) |
||
Line 90: | Line 90: | ||
</soapenv:Envelope>" ,where “function” is the name of the called function. | </soapenv:Envelope>" ,where “function” is the name of the called function. | ||
</pre> | </pre> | ||
− | |||
− | |||
Having indicated the function, one should enlist its arguments. There’re only 2 arguments in almost all 4shared api-functions – these are login and password. | Having indicated the function, one should enlist its arguments. There’re only 2 arguments in almost all 4shared api-functions – these are login and password. | ||
Line 97: | Line 95: | ||
In response to the call, 4shared server will return the results of the function, the SOAP-message in XML-format: | In response to the call, 4shared server will return the results of the function, the SOAP-message in XML-format: | ||
− | <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> | + | <pre><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> |
<S:Body> | <S:Body> | ||
<ns2:functionResponse xmlns:ns2="http://api.soap.shared.pmstation.com/"> | <ns2:functionResponse xmlns:ns2="http://api.soap.shared.pmstation.com/"> | ||
Line 105: | Line 103: | ||
</ns2: functionResponse> | </ns2: functionResponse> | ||
</S:Body> | </S:Body> | ||
− | </S:Envelope> | + | </S:Envelope> , where “result” is the result of calling up the “function”.</pre> |
− | + | ||
− | where “result” is the result of calling up the “function”. | + | |
As an example, we need to get the content of the directory. To do this, we need to call the function “getItems” (link to http://help.4shared.com/index.php/SOAP_API#getItems). Its first 2 arguments are, as usual, login and password. The 3rd one is the ID of the requested directory. The body of the relative SOAP-message will be as follows: | As an example, we need to get the content of the directory. To do this, we need to call the function “getItems” (link to http://help.4shared.com/index.php/SOAP_API#getItems). Its first 2 arguments are, as usual, login and password. The 3rd one is the ID of the requested directory. The body of the relative SOAP-message will be as follows: |
Revision as of 13:14, 21 April 2011
Dear developer!
We are glad to introduce you official 4shared API Program. With the 4shared API, you can get started developing your application for Mobile Phones (iPhone, Android, Symbian, Blackberry, Windows mobile), Windows, Mac, iPad, and Linux today.
You may easily use more than 50 API functions to perform any actions with 4shared like - access web account, upload\download files, search files, create and delete folders, etc.
4shared API is totaly free! All required samples you may find at 4shared API documentation. Any questions regarding 4shared developer program you may discuss at our forum.
Every month we will pick best app with 4shared API and award developer for $5,000! We pay $5,000/month for best app.
Contents
- 1 Welcome to 4shared SOAP API documentation!
- 2 Sources
- 3 Quick start guide
- 4 Samples
- 5 Method Summary
- 6 addToFavorites
- 7 addToMyAccount
- 8 checkSharedDirAccess
- 9 createNewFolder
- 10 createUploadSessionKey
- 11 decodeId
- 12 decodeLink
- 13 deleteFile
- 14 deleteFileFinal
- 15 deleteFolder
- 16 deleteFolderFinal
- 17 downloadFinished
- 18 emptyRecycleBin
- 19 getAllFolders
- 20 getAllItems
- 21 getDirDescription
- 22 getDirectLink
- 23 getDirInfo
- 24 getExifFileInfo
- 25 getExifFileInfos
- 26 getFavorites
- 27 getFileDescription
- 28 getFileDownloadLink
- 29 getFileInfo
- 30 getFiles
- 31 getFreeSpace
- 32 getItemInfo
- 33 getItems
- 34 getItemsCount
- 35 getItemsPartial
- 36 getMaxFileSize
- 37 getMp3FileInfo
- 38 getMp3FileInfos
- 39 getNewFileDataCenter
- 40 getNotOwnedSizeLimit
- 41 getPreviewLink
- 42 getRecycleBinItems
- 43 getRoot
- 44 getSharedDirItems
- 45 getSpaceLimit
- 46 getUploadFormUrl
- 47 hasRightUpload
- 48 isAccountActive
- 49 isAccountBanned
- 50 isAccountPremium
- 51 isExistsLoginPassword
- 52 login
- 53 pasteFilesDirs
- 54 removeFromFavorites
- 55 renameFile
- 56 renameFolder
- 57 restoreFile
- 58 restoreFiles
- 59 setDirDescription
- 60 setFileDescription
- 61 signup
- 62 signupUsername
- 63 uploadCancelFile
- 64 uploadFinishFile
- 65 uploadStartedFileExists
- 66 uploadStartFile
- 67 uploadStartFileUpdate
- 68 Method Detail
- 69 Upload HOW TO
- 70 Search files on 4shared
- 71 checkSharedDirAccess
- 72 checkSubdomain
- 73 createNewFolder
- 74 createUploadSessionKey
- 75 deleteFile
- 76 deleteFolder
- 77 downloadFinished
- 78 getAllFolders
- 79 getAllItems
- 80 getCurrentUploaderVersion
- 81 getDirectLink
- 82 getDirInfo
- 83 getFileDownloadLink
- 84 getFileInfo
- 85 getFolderSharingProperties
- 86 getFreeSpace
- 87 getHistory
- 88 getHistoryFromId
- 89 getItemInfo
- 90 getItems
- 91 getMaxFileSize
- 92 getNewFileDataCenter
- 93 getNotOwnedSizeLimit
- 94 getOperationDescriptions
- 95 getRecycleBinItems
- 96 getSharedDirItems
- 97 getSpaceLimit
- 98 getUploadFormUrl
- 99 hasRightUpload
- 100 isAccountActive
- 101 isAccountBanned
- 102 isAccountPremium
- 103 isExistsLoginPassword
- 104 login
- 105 markSynchronized
- 106 pasteFilesDirs
- 107 renameFile
- 108 renameFolder
- 109 restoreFile
- 110 restoreFiles
- 111 setFolderSharingProperties
- 112 signup
- 113 syncFinished
- 114 uploadCancelFile
- 115 uploadFinishFile
- 116 uploadStartedFileExists
- 117 uploadStartFile
- 118 uploadStartFileUpdate
Sources
4shared Project at google code.google.com
WSDL can be obtained from here or please check here for more secure SOAPing.
You can browse java sources from mercurial repositories at http://code.google.com/p/4shared-api/source/browse/. Or use hg clone https://4shared-api.googlecode.com/hg/ 4shared-api to get local copy of sources.
Quick start guide
To start working with 4shared SOAP API you should have a copy of mercurial for your favorite OS, Java SDK, ant building system. Some Java IDE is also recomended.
1. Get sources from google.code.com:
hg clone https://4shared-api.googlecode.com/hg/ 4shared-api
2. Go to created folder and build project:
ant
3. Try to use some of provided examples:
cd dist/demo ./signup <username> <password> ./createfolder <username> <password> <foldername> ./upload <username> <password> <path to file> ./browse <login> <password>
4. Learn how this demos have been written. All demo sources are situated in demo/com/pmstation/shared/soap/demo
5. Write your own fresh and brilliant application
Samples
Java:
iOS
Every application in iOS can use 4shared service. The client can interact with 4shared server via SOAP protocol, by means of calling up 4shared API functions. These functions may be used to request for the content of your account, get the necessary links to files, and edit the file structure and the directory properties on the server. The full description of the api is provided here (link to http://help.4shared.com/index.php/SOAP_API). The SOAP-protocol may be checked here (link to http://en.wikipedia.org/wiki/SOAP).
To call up 4shared api-function, it’s necessary to send the XML-message to server http://api.4shared.com/jax2/DesktopApp SOAP.
The common template for the message is the following:
|<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" <br>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <function xmlns="http://api.soap.shared.pmstation.com/"> <arg0 xmlns="">login</arg0> <arg1 xmlns="">password</arg1> <arg2 xmlns="">arg1</arg2> ... </function> </soapenv:Body> </soapenv:Envelope>" ,where “function” is the name of the called function.
Having indicated the function, one should enlist its arguments. There’re only 2 arguments in almost all 4shared api-functions – these are login and password.
In response to the call, 4shared server will return the results of the function, the SOAP-message in XML-format:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:functionResponse xmlns:ns2="http://api.soap.shared.pmstation.com/"> <return> result </return> </ns2: functionResponse> </S:Body> </S:Envelope> , where “result” is the result of calling up the “function”.
As an example, we need to get the content of the directory. To do this, we need to call the function “getItems” (link to http://help.4shared.com/index.php/SOAP_API#getItems). Its first 2 arguments are, as usual, login and password. The 3rd one is the ID of the requested directory. The body of the relative SOAP-message will be as follows:
<getItems xmlns="http://api.soap.shared.pmstation.com/"> <arg0 xmlns="">username@server.com</arg0> <arg1 xmlns="">*********</arg1> <arg2 xmlns="">123456789</arg2> </getItems>
In response, 4shared server will return the array with the elements of directory:
<item> <date>(date of file creation)</date> <directory>(true – if file is a directory, otherwise - false)</directory> <downloadCount>(the number of file downloads)</downloadCount> <downloadLink>(link for the file-download from 4shared-server)</downloadLink> <id>(file ID)</id> <md5>(md5-hash)</md5> <name>(name)</name> <parentId>(parent directory ID)</parentId> <size>(size)</size> … </item>
Let’s consider the example of the simple application, which allows the user to browse the content of his/her account.
The 1st thing, which should be done, when starting the program, is to authorize (login) on 4shared server by means of calling up the function “login” (link to http://help.4shared.com/index.php/SOAP_API#login ). If authorization is passed successfully, the next step will be the request for the root account directory by means of calling up the function “getRoot” (link to http://help.4shared.com/index.php/SOAP_API#getRoot). The calling result will be the structure “item”, described above.
To store received information, I’ve created secondary (assisting) class File:
@interface File : NSObject { NSUInteger _id; NSUInteger _parentId; NSString *_name; NSUInteger _size; NSString *_link; BOOL _dir;
NSArray *_content; }
…
@end
Now that we have the root directory ID, we can use the function “getItems”, to get its content, and then the content of any subdirectory.
To create the XML-formatted message and the parsing of received result, it’s possible to use any XML – parser. In the demo-sample, I’ve used GDataXML-parser from Google Data APIs Objective-C Client Library http://code.google.com/p/gdata-objectivec-client/). The function to generate the message may be as follows:
+ (NSURLRequest*)soapRequestWithFunction:(NSString*)function andParams:(NSArray*)params {
GDataXMLElement *xmlFunction = [GDataXMLNode elementWithName:function];
GDataXMLNode *xmlNS = [GDataXMLNode namespaceWithName:nil stringValue:@"http://api.soap.shared.pmstation.com/"]; [xmlFunction addNamespace:xmlNS];
for (NSUInteger i = 0; i < [params count]; i++) { NSString *elementName = [NSString stringWithFormat:@"arg%lu", i]; GDataXMLElement *arg = [GDataXMLNode elementWithName:elementName]; NSString *param = (NSString*)[params objectAtIndex:i]; [arg setStringValue:(NSString*) param]; GDataXMLNode *attrib = [GDataXMLNode attributeWithName:@"xmlns" stringValue:@""]; [arg addAttribute:attrib]; [xmlFunction addChild:arg]; }
GDataXMLElement *body = [GDataXMLNode elementWithName:@"soapenv:Body"]; [body addChild:xmlFunction];
GDataXMLElement *soapEnvelope = [GDataXMLNode elementWithName:@"soapenv:Envelope"]; GDataXMLNode *soapNS1 = [GDataXMLNode namespaceWithName:@"soapenv" stringValue:@"http://schemas.xmlsoap.org/soap/envelope/"]; GDataXMLNode *soapNS2 = [GDataXMLNode namespaceWithName:@"xsd" stringValue:@"http://www.w3.org/2001/XMLSchema"]; GDataXMLNode *soapNS3 = [GDataXMLNode namespaceWithName:@"xsi" stringValue:@"http://www.w3.org/2001/XMLSchema-instance"]; [soapEnvelope setNamespaces:[NSArray arrayWithObjects:soapNS1, soapNS2, soapNS3, nil]]; [soapEnvelope addChild:body];
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithRootElement:soapEnvelope]; [doc setVersion:@"1.0"]; [doc setCharacterEncoding:@"UTF-8"]; NSData *data = [doc XMLData]; [doc release]; NSString *dataLen = [NSString stringWithFormat:@"%lu", [data length]];
NSURL *url = [NSURL URLWithString:@"http://api.4shared.com/jax2/DesktopApp"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [request addValue:@"" forHTTPHeaderField:@"SOAPAction"]; [request addValue:dataLen forHTTPHeaderField:@"Content-Length"]; [request setHTTPMethod:@"POST"]; [request setHTTPBody: data];
return request; }
The content of the directory is shown in the table (class FilesViewController). I show its name and size in the cell, related to the file accordingly:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
…
cell.accessoryType = file.isDir ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
cell.imageView.image = file.isDir ? [UIImage imageNamed:@"dir.png"] : nil;
cell.textLabel.text = file.name;
cell.detailTextLabel.text = file.isFile ? [NSString stringWithFormat:@"%.2f Kb", (CGFloat) file.size / 1024.0] : nil;
…
}
All content is opened via tap in the cell with directory. The page with the following link is opened in the browser via tap on the file:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { … if (file.isDir) { FilesViewController *fvc = [[FilesViewController alloc] initWithFile:file]; [self.navigationController pushViewController:fvc animated:YES];
[fvc release];
} else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:file.link]];
} … }
The demo-sample can be downloaded here (link to the demo-project archive). To start the sample application, enter demo-Prefix.pch in the file, enter your login and password from the site 4shared (macros LOGIN and PASSWORD).
Symbian (QT): Every application can interact with 4shared server via SOAP protocol, by means of calling up 4shared API functions. These functions may be used to request for the content of your account, get the necessary links to files, and edit the file structure and the directory properties on the server. The full description of the api is provided here (link to http://help.4shared.com/index.php/SOAP_API). The SOAP-protocol may be checked here (link to http://en.wikipedia.org/wiki/SOAP).
As an SDK for creating applications for mobile devices, let’s take "Nokia Qt SDK 1.0", which can be got here (http://www.forum.nokia.com/Develop/Qt/). This package also includes IDE "Qt Creator", which we will use.
In the beginning, let’s create the new project with type “Mobile application Qt” and name it 4shared. In the visual editor we’ll add “List widget” in the main window, which will include the elements of the root catalogue, downloaded from 4shared server. In the class MainWindow constructor, in a line - setCentralWidget(ui->listWidget); - растянем listWidget на весь экран.
To work with SOAP protocol in a more convenient way, we’ll take initial codes from the library QtSOAP and insert them into the project, as this library isn’t included into mobile version. In addition to that, in order to make the application work with network in Symbian devices, it’s necessary to add the following line in the file 4shared.pro in the part, devoted to the specific Symbian settings: - Symbian { ... TARGET.CAPABILITY += NetworkServices ... } - Then, we’ll add and initialize members in class MainWindow: - class MainWindow : public QMainWindow { ...
QNetworkAccessManager nam; QtSoapHttpTransport http;
... };
MainWindow::MainWindow(QWidget *parent) : ...
nam(this), http(this),
... { ...
connect(&http, SIGNAL(responseReady()), SLOT(getResponse()));
http.setNetworkAccessManager(&nam); http.setAction(""); http.setHost("api.4shared.com", 80);
... } - which realize (implement) the transfer of our future requests. The slot getResponse() will be invoked, when the answers to our requests are received.
To download the list of files and subdirectories of the root directory, it’s necessary to perform 3 requests in series: 1. isExistsLoginPassword - authentication 2. getRoot – receipt of information about the root directory 3. getItems – receipt of the list of elements in the defined directory (in our case – root directory ) - class MainWindow : public QMainWindow { ... private slots:
void getResponse();
private:
QtSoapMessage initStdSoapMessage(const QString &methodName);
void authorize(); void authorizeHandler(const QtSoapType &res);
void getRoot(); void getRootHandler(const QtSoapType &res);
void getItems(long id); void getItemsHandler(const QtSoapType &res);
enum Operation {unknown, authorize_op, getRoot_op, getItems_op};
private: ...
Operation operation;
QString login, password;
long rootId;
};
void MainWindow::getResponse() {
Operation op = operation; operation = unknown;
// Get the response, check for error. const QtSoapMessage &resp = http.getResponse(); if(resp.isFault()) { QMessageBox::warning(NULL, "Warning", "SOAP: query failed (" + resp.faultString().value().toString() + ")"); return; }
// Extract the return value from this method response, check for errors. const QtSoapType &res = resp.returnValue(); if(!res.isValid()) { QMessageBox::warning(NULL, "Warning", "SOAP: invalid return value"); return; }
switch(op) { case authorize_op: authorizeHandler(res); break; case getRoot_op: getRootHandler(res); break; case getItems_op: getItemsHandler(res); break; case unknown: break; }
}
QtSoapMessage MainWindow::initStdSoapMessage(const QString &methodName) {
QtSoapMessage request; request.setMethod(QtSoapQName(methodName, "http://api.soap.shared.pmstation.com/")); request.addMethodArgument("arg0", "", login); request.addMethodArgument("arg1", "", password); return request;
}
void MainWindow::authorize() {
QtSoapMessage request = initStdSoapMessage("isExistsLoginPassword"); operation = authorize_op; http.submitRequest(request, "/jax2/DesktopApp");
}
void MainWindow::authorizeHandler(const QtSoapType &res) {
bool auth = res.value().toBool(); if(auth) { // QMessageBox::information(NULL, "Authorization", "Authorized"); getRoot(); } else QMessageBox::warning(NULL, "Warning", "Invalid user name or password");
}
void MainWindow::getRoot() {
QtSoapMessage request = initStdSoapMessage("getRoot"); operation = getRoot_op; http.submitRequest(request, "/jax2/DesktopApp");
}
void MainWindow::getRootHandler(const QtSoapType &res) {
rootId = res["id"].toInt(); getItems(rootId);
}
void MainWindow::getItems(long id) {
QtSoapMessage request = initStdSoapMessage("getItems"); request.addMethodArgument("arg2", "", id); operation = getItems_op; http.submitRequest(request, "/jax2/DesktopApp");
}
void MainWindow::getItemsHandler(const QtSoapType &res) {
for(int i=0; i<res.count(); i++) { const QtSoapType &item = res[i];
if(item["removed"].toBool()) continue;
QString name; if(item["directory"].toBool()) name = " <dir> "; name += item["name"].toString();
QListWidgetItem *itm = new QListWidgetItem(name); itm->setSizeHint(QSize(0, 50)); ui->listWidget->addItem(itm); }
} -
Demo-sample can be downloaded here (link to the demo-project archive). To start the sample application, insert your login and password from 4shared in the file MainWindow.cpp (variable login and password).
Method Summary
addToFavorites
long addToFavorites(java.lang.String login, java.lang.String password, long fileId) Adds file to user favorites.
addToMyAccount
java.lang.String addToMyAccount(java.lang.String login, java.lang.String password, long dirId, java.lang.String link) Adds file or folder identified by supplied link to user's account in folder identified by dirId
int checkSharedDirAccess(java.lang.String login, java.lang.String password, long dirID, java.lang.String dirPassword, java.lang.String userDirPassword) Checks if directory can be accessed by specified user with specified passwords
createNewFolder
long createNewFolder(java.lang.String login, java.lang.String password, long dirID, java.lang.String folderName) Creates new folder as dirId subfolder
createUploadSessionKey
java.lang.String createUploadSessionKey(java.lang.String login, java.lang.String password, long dirID) Creates session key for uploading file
decodeId
java.lang.String decodeId(java.lang.String login, java.lang.String password, java.lang.String encodedId) turns new encoded folder id into form id+"/"+4shared_password for shared folder browsing encoded folder id can be found as 8-symbol group of folder url right after /dir/ regexp: http://www.4shared.com/dir/(.{8,8})/.*
decodeLink
long decodeLink(java.lang.String login, java.lang.String password, java.lang.String link) Used to get item id from item link.
deleteFile
void deleteFile(java.lang.String login, java.lang.String password, long fileID) Removes file to recycle bin
deleteFileFinal
void deleteFileFinal(java.lang.String login, java.lang.String password, long fileID) Remove file once and for all.
deleteFolder
void deleteFolder(java.lang.String login, java.lang.String password, long dirID) Completely removes folder and puts all of it contents to recycle bin
deleteFolderFinal
void deleteFolderFinal(java.lang.String login, java.lang.String password, long dirID) Removes files and subfolders from recycle bin.
downloadFinished
void downloadFinished(java.lang.String login, java.lang.String password, long fileId) Have to be called after full file download
emptyRecycleBin
int emptyRecycleBin(java.lang.String login, java.lang.String password) Empties recycle bean for specified user.
getAllFolders
AccountItem[] getAllFolders(java.lang.String login, java.lang.String password) Returns all of the folders in user's root directory
getAllItems
AccountItem[] getAllItems(java.lang.String login, java.lang.String password) Returns info about all items in user's root folder
getDirDescription
java.lang.String getDirDescription(java.lang.String login, java.lang.String password, long dirId) Returns folder description
getDirectLink
java.lang.String getDirectLink(java.lang.String login, java.lang.String password, java.lang.String link) Returns link to start immediate downloading.
getDirInfo
AccountItem getDirInfo(java.lang.String login, java.lang.String password, long dirID) Return info about specified folder
getExifFileInfo
ExifInfo getExifFileInfo(java.lang.String login, java.lang.String password, java.lang.String fileLink) Return image info for specified file link if any
getExifFileInfos
ExifInfo[] getExifFileInfos(java.lang.String login, java.lang.String password, long dirId) Returns @see ExifInfo for all image files in specified folder
getFavorites
AccountItem[] getFavorites(java.lang.String login, java.lang.String password) Returns user favored files.
getFileDescription
java.lang.String[] getFileDescription(java.lang.String login, java.lang.String password, long fileId) Returns file title, tags and description if any
getFileDownloadLink
java.lang.String getFileDownloadLink(java.lang.String login, java.lang.String password, long fileID) Returns download link for user owned file
getFileInfo
AccountItem getFileInfo(java.lang.String login, java.lang.String password, long fileID) Returns info about file
getFiles
AccountItem[] getFiles(java.lang.String login, java.lang.String password, long[] fileIds) Returns account items for file ids.
getFreeSpace
long getFreeSpace(java.lang.String login, java.lang.String password) Gets free space left for user
getItemInfo
AccountItem getItemInfo(java.lang.String login, java.lang.String password, long itemID, boolean dir) Common method for DesktopApp.getFileInfo(String, String, long) and DesktopApp.getDirInfo(String, String, long) distinguished by value of dir parameter
getItems
AccountItem[] getItems(java.lang.String login, java.lang.String password, long dirID) Returns array of infos about contents of specified dir.
getItemsCount
long getItemsCount(java.lang.String login, java.lang.String password, long dirID) Returns item count for dirId (-1 for root folder)
getItemsPartial
AccountItem[] getItemsPartial(java.lang.String login, java.lang.String password, long dirId, int startIndex, int count) Get specified count folders' items ordered by name, folders first starting from startIndex
getMaxFileSize
long getMaxFileSize(java.lang.String login, java.lang.String password) Return maximum allowed file size for specified user
getMp3FileInfo
Mp3Info getMp3FileInfo(java.lang.String login, java.lang.String password, java.lang.String fileLink) Return audio info for specified file link if any
getMp3FileInfos
Mp3Info[] getMp3FileInfos(java.lang.String login, java.lang.String password, long dirId) Returns audio info for all audio files in folder
getNewFileDataCenter
long getNewFileDataCenter(java.lang.String login, java.lang.String password) Returns datacenter id to upload files to
getNotOwnedSizeLimit
long getNotOwnedSizeLimit() Max file size which can be downloaded without speed limit
getPreviewLink
java.lang.String getPreviewLink(java.lang.String login, java.lang.String password, long fileId) Return link to small preview image, or to flv preview for video files
getRecycleBinItems
AccountItem[] getRecycleBinItems(java.lang.String login, java.lang.String password) Returns info about files in recycle bin
getRoot
AccountItem getRoot(java.lang.String login, java.lang.String password) Returns account item for user's root directory
AccountItem[] getSharedDirItems(java.lang.String login, java.lang.String password, long dirID, java.lang.String dirPassword, java.lang.String userDirPassword) Return content of possibly not owned shared folder
getSpaceLimit
long getSpaceLimit(java.lang.String login, java.lang.String password) Returns user space limit
getUploadFormUrl
java.lang.String getUploadFormUrl(int dataCenterID, java.lang.String sessionKey) Returns url to upload file to.
hasRightUpload
boolean hasRightUpload() Whether upload feature is on.
isAccountActive
boolean isAccountActive(java.lang.String login, java.lang.String password) Checks account active status
isAccountBanned
boolean isAccountBanned(java.lang.String login, java.lang.String password) Checks if user account is banned
isAccountPremium
boolean isAccountPremium(java.lang.String login, java.lang.String password) Checks if user account is premium
isExistsLoginPassword
boolean isExistsLoginPassword(java.lang.String login, java.lang.String password) true-false version of login.
login
java.lang.String login(java.lang.String login, java.lang.String password) Login version with diagnostic message.
pasteFilesDirs
java.lang.String pasteFilesDirs(java.lang.String login, java.lang.String password, long toFolderId, boolean makeCopy, long[] fileIds, long[] dirIds) Copy-pastes or cut-pastes a group of files and dirs.
removeFromFavorites
long removeFromFavorites(java.lang.String login, java.lang.String password, long fileId) Removes file from user's favorites.
renameFile
long renameFile(java.lang.String login, java.lang.String password, long fileID, java.lang.String newName) Renames specified file
renameFolder
long renameFolder(java.lang.String login, java.lang.String password, long dirID, java.lang.String newName) Renames specified folder
restoreFile
void restoreFile(java.lang.String login, java.lang.String password, long fileID) Restores file from Recycle Bin.
restoreFiles
void restoreFiles(java.lang.String login, java.lang.String password, long[] fileIDs) Restores group of files from Recycle Bin.
setDirDescription
java.lang.String setDirDescription(java.lang.String login, java.lang.String password, long dirId, java.lang.String newDescription, boolean setAsDefault, boolean applyToAll) Sets folder description for dedicated folder or account as a whole
setFileDescription
java.lang.String setFileDescription(java.lang.String login, java.lang.String password, long fileId, java.lang.String title, java.lang.String tags, java.lang.String newDescription, boolean setAsDefault, boolean applyToAll) Sets file title, tags and description for dedicated file or account as a whole
signup
java.lang.String signup(java.lang.String login, java.lang.String password) Creates new User with specified login(email) and password and sends confirmation email.
signupUsername
java.lang.String signupUsername(java.lang.String login, java.lang.String password, java.lang.String username) Creates new User with specified login(email), short username for easing login and password and sends confirmation email.
uploadCancelFile
void uploadCancelFile(java.lang.String login, java.lang.String password, long fileId) Call if upload was canceled
uploadFinishFile
java.lang.String uploadFinishFile(java.lang.String login, java.lang.String password, long fileId, java.lang.String md5) Complete resumable upload
uploadStartedFileExists
boolean uploadStartedFileExists(java.lang.String login, java.lang.String password, long fileId) Checks if file was partially uploaded
uploadStartFile
long uploadStartFile(java.lang.String login, java.lang.String password, long dirID, java.lang.String name, long fullSize) Resumable upload - start
uploadStartFileUpdate
long uploadStartFileUpdate(java.lang.String login, java.lang.String password, long updateFileId, java.lang.String name, long fullSize) Update file
Method Detail
Upload HOW TO
First of all you should check if you have enough free space in user’s account:
function long getFreeSpace(String login, String password);
(returned value – free space in bytes)
And what is upload limit for user (per file):
function long getMaxFileSize(String login, String password);
(returned value – maximum file size in bytes)
Please, check if target file corresponds the mentioned conditions, if it does, then:
Get session:
function String createUploadSessionKey(String login, String password, long dirID);
Set ‘-1’ as DirId parameter. In this case file will be uploaded to the root directory. Or read full API description to learn how to browse user's directory for subdirectories' ids. Return session key if everything is ok and empty or null string if you can't upload to the specified dir.
Get datacenter:
function int getNewFileDataCenter(String login, String password);
If returned datacenter is less or equal then 0 - something goes wrong.
Then get URL for upload using session and datacenter:
function String getUploadFormUrl(int dataCenterID, String sessionKey);
Returned string is only valid if it starts with http, otherwise, you can't upload file;
To reserve fileId for yor upload call function:
function long uploadStartFile(String login, String password, long dirID, String name, long fullSize);
Again, fileId can be only positive.
Then use received URL and fileId to upload by executing POST query multipart/form-data with fields
1) resumableFileId (file ID received via previous method)
2) resumableFirstByte (index of the first byte of current part. If the file is uploaded as single unit – then pass 0. If the file is divided into parts and is uploaded by parts – then pass index of the byte every part starts from)
Attach the file to the query as a parameter FilePart.
where last parameter is file md5 digest. If the file is successfully uploaded – function returns null or empty line, if not – you will get an error message. If the file was uploaded by parts, this function unites them into one.
You are done!
To search files on 4shared.com you should use the following url
http://search.4shared.com/network/searchXml.jsp
Parameters:
q - keyword
Example: q=funny cats
searchExtention - type of file (extension or category)
If you need extension just use searchExtention=mid. Remember, if you are using parameter searchExtention you should also use searchmode=3
For searching in direct category use the following:
category:1 - music category:2 - video category:3 - photo category:4 - archive category:6 - program category:7 - web documents category:8 - mobile applications
Example: use searchExtention=category:1 - if you are searching only music.
sortType - type of sorting
1 - sort by downloads; 2 - sort by upload date; 3 - sort by size; 4 - sort by name;
sortOrder - sorting order(Ascending -1, Descending 1)
start - offset, is used for pagination
start value should be divisible by 10
Usage example:
http://search.4shared.com/network/searchXml.jsp?q=somebody&searchExtention=mid&sortType=3&sortOrder=1&searchmode=3&start=10
Response:
<search-result> <query>somebody</query> - keyword <total-files>24</total-files> - number of found files <page-number>2</page-number> - page number <pages-total>2</pages-total> - total amount of pages <start>10</start> - offset <files-per-page>10</files-per-page> - amount of files per page <files-approx-count>24</files-approx-count> - approximate number of files (when amount of found files is more than 1,000). If amount of found files is less than 1,000 it equals to <total-files></total-files> <result-files> <file> <name>somebody_to_shove.mid</name> - filename <description/> - description <downloads-count>8</downloads-count> - number of downloads <upload-date-format>hh:mm dd-MM-yyyy</upload-date-format> - upload date format <upload-date>04:19 19-05-2009</upload-date> - upload date <url>http://www.4shared.com/audio/qVaKdItF/somebody_to_shove.htm</url> - download page url <preview-url/> - preview url if exist <flash-preview-url/>- flash preview url if exist <user>wym</user> - username <size>39 KB</size> - file size </file> <file> ... </file> </result-files> </search-result>
public int checkSharedDirAccess(java.lang.String login, java.lang.String password, long dirID, java.lang.String dirPassword, java.lang.String userDirPassword)
Checks if directory can be accessed by specified user with specified passwords
Parameters:
login - is user login password - is user password dirID - id of the directory to be accessed dirPassword - generated password to view contents of not owned folders userDirPassword - user specified password
Returns:
Status. 0 ok 1 no such dir 2 owner inactive 3 abused dir 4 incorrect dirPassword 5 dir is not shared 6 owner is banned 8 incorrect userDirPassword
checkSubdomain
public java.lang.String checkSubdomain(java.lang.String login, java.lang.String password, long dirId, java.lang.String subdomainName)
Checks if subdomain can be set for specified folder
Parameters:
login - user login password - user password dirId - id of the directory subdomainName - name to be set
Returns:
Empty string or null if everything is ok and error message otherwise
createNewFolder
public long createNewFolder(java.lang.String login, java.lang.String password, long dirID, java.lang.String folderName)
Creates new folder as dirId subfolder
Parameters:
login - user login password - user password dirID - id of the directory to create folder in folderName - new folder name
Returns:
0 - if creation denied, newly created dir ID otherwise -1 - already exists -2 - attempt to create folder in removed parent
createUploadSessionKey
public java.lang.String createUploadSessionKey(java.lang.String login, java.lang.String password, long dirID)
Creates session key for uploading file
Parameters:
login - user login password - user password dirID - id of the directory to upload to
Returns:
session key
deleteFile
public void deleteFile(java.lang.String login, java.lang.String password, long fileID)
Removes file to recycle bin or from recycle bin if it is already there
Parameters:
login - user login password - user password fileID - id of the file to be removed
deleteFolder
public void deleteFolder(java.lang.String login, java.lang.String password, long dirID)
Completely removes folder and puts all of it contents to recycle bin
Parameters:
login - user login password - user password dirID - id of the directory to be removed
downloadFinished
public void downloadFinished(java.lang.String login, java.lang.String password, long fileId)
Have to be called after full file download
Parameters:
login - user login password - user password fileId - id of the file which was downloaded
getAllFolders
public com.pmstation.shared.soap.api.AccountItem[] getAllFolders(java.lang.String login, java.lang.String password)
Returns all of the folders in user's root directory
Parameters:
login - user login password - user password
Returns:
Array of info records about user's root folder subfolders
getAllItems
public com.pmstation.shared.soap.api.AccountItem[] getAllItems(java.lang.String login, java.lang.String password)
Returns info about all items in user's root folder
Parameters:
login - user login password - user password
Returns:
Array of info records about user's root folder content
getCurrentUploaderVersion
public long getCurrentUploaderVersion()
Returns last uploader version. If this increase you should consider to look at online api documentation to check changes. We will try to maintain backward compatibility but this is not guaranteed.
Returns:
Uploader version
getDirectLink
public java.lang.String getDirectLink(java.lang.String login, java.lang.String password, java.lang.String link)
Returns link to start immediate downloading. Not always possible however, because we are ads-supported mostly. Returns link starting with "http" if ok.
Parameters:
login - user login password - user password link - indirect download link
getDirInfo
public com.pmstation.shared.soap.api.AccountItem getDirInfo(java.lang.String login, java.lang.String password, long dirID)
Return info about specified folder
Parameters:
login - user login password - user password dirID - id of the folder
Returns:
folder info
getFileDownloadLink
public java.lang.String getFileDownloadLink(java.lang.String login, java.lang.String password, long fileID)
Returns download link for user owned file
Parameters:
login - user login password - user password fileID - id of file to be downloaded
Returns:
Download link or empty string if some errors occurs.
getFileInfo
public com.pmstation.shared.soap.api.AccountItem getFileInfo(java.lang.String login, java.lang.String password, long fileID)
Returns info about file
Parameters:
login - user login password - user password fileID - id of file to get info about
Returns:
file info
getFolderSharingProperties
public com.pmstation.shared.soap.api.SharedFolderProperties[] getFolderSharingProperties(java.lang.String login, java.lang.String password, long dirId)
Returns folder sharing properties. Output is two element array: res[0] - actual values. res[1] - properties which can be set for this user is marked as true.
Parameters:
login - user login password - user password dirId - id of the folder to properties for
Returns:
folder sharing properties
getFreeSpace
public long getFreeSpace(java.lang.String login, java.lang.String password)
Gets free space left for user
Parameters:
login - user login password - user password
Returns:
free space left for user in bytes
getHistory
public com.pmstation.shared.soap.api.DirHistoryDTO[] getHistory(java.lang.String login, java.lang.String password, long dirId)
Returns history of operations in specified folder and subfolders. For operation field meanings see getOperationDescriptions()
Parameters:
login - user login password - user password dirId - id of folder
Returns:
Array of folder changes. May be null or empty
getHistoryFromId
public com.pmstation.shared.soap.api.DirHistoryDTO[] getHistoryFromId(java.lang.String login, java.lang.String password, long dirId, long fromId)
Returns history of operations which occurs in specified folder and subfolders with history id more then specified. For operation field meanings see getOperationDescriptions()
Parameters:
login - user login password - user password dirId - id of folder to take history for fromId - id floor of history
Returns:
Array of folder changes. May be null or empty
getItemInfo
public com.pmstation.shared.soap.api.AccountItem getItemInfo(java.lang.String login, java.lang.String password, long itemID, boolean dir)
Common method for getFileInfo(String, String, long) and getDirInfo(String, String, long) distinguished by value of dir parameter
Parameters:
login - user login password - user password itemID - id of element dir - if true then supplied Id is folder and file otherwise
Returns:
getItems
public com.pmstation.shared.soap.api.AccountItem[] getItems(java.lang.String login, java.lang.String password, long dirID)
Returns array of infos about contents of specified dir.
Parameters:
login - user login password - user password dirID - id of folder to list (-1 for root)
Returns:
Array of info items
getMaxFileSize
public long getMaxFileSize(java.lang.String login, java.lang.String password)
Return maximum allowed file size for specified user
Parameters:
login - user login password - user password
Returns:
maximum allowed file size in bytes
getNewFileDataCenter
public long getNewFileDataCenter(java.lang.String login, java.lang.String password)
Returns datacenter id to upload files to
Parameters:
login - user login password - user password
Returns:
datacenter id to upload new files to
getNotOwnedSizeLimit
public long getNotOwnedSizeLimit()
Max file size which can be downloaded without speed limit
Returns:
max file size which can be downloaded without speed limit
getOperationDescriptions
public java.lang.String[] getOperationDescriptions()
Returns array of OperationEnum names. Array index corresponds to values which can be returned as DirHistoryDTO.getOperation(). Array is supposed to be zero-based.
Returns:
array of OperationEnum names
getRecycleBinItems
public com.pmstation.shared.soap.api.AccountItem[] getRecycleBinItems(java.lang.String login, java.lang.String password)
Returns info about files in recycle bin
Parameters:
login - user login password - user password
Returns:
Array of recycle bin content info items
public com.pmstation.shared.soap.api.AccountItem[] getSharedDirItems(java.lang.String login, java.lang.String password, long dirID, java.lang.String dirPassword, java.lang.String userDirPassword)
Return content of possibly not owned shared folder
Parameters:
login - user login password - user password dirID - id of folder to view dirPassword - 4shared generated dir password userDirPassword - user set dir password if needed
Returns:
content of specified shared folder or null
getSpaceLimit
public long getSpaceLimit(java.lang.String login, java.lang.String password)
Returns user space limit
Parameters:
login - user login password - user password
Returns:
space limit
getUploadFormUrl
public java.lang.String getUploadFormUrl(int dataCenterID,
java.lang.String sessionKey)
Returns url to upload file to.
Parameters:
dataCenterID - id of datacenter to upload to sessionKey - upload session key
hasRightUpload
public boolean hasRightUpload()
Whether upload feature is on.
Returns:
whether upload feature is on.
isAccountActive
public boolean isAccountActive(java.lang.String login, java.lang.String password)
Checks account availability
Parameters:
login - user login password - user password
Returns:
true if account is active
isAccountBanned
public boolean isAccountBanned(java.lang.String login, java.lang.String password)
Checks if user account is banned
Parameters:
login - user login password - user password
Returns:
true if user accont is banned
isAccountPremium
public boolean isAccountPremium(java.lang.String login, java.lang.String password)
Checks if user account is premium
Parameters:
login - user login password - user password
Returns:
true of user has premium account
isExistsLoginPassword
public boolean isExistsLoginPassword(java.lang.String login, java.lang.String password)
true-false version of login
Parameters:
login - user login password - user password
Returns:
true if login was successful
login
public java.lang.String login(java.lang.String login, java.lang.String password)
Login
Parameters:
login - user login password - user password
Returns:
Empty string if all ok, diagnostic message otherwise
markSynchronized
public void markSynchronized(java.lang.String login, java.lang.String password, long dirId)
Informs 4shared to write folder and subfolders usage history
Parameters:
login - user login password - user password dirId - id of folder to write history for
pasteFilesDirs
public java.lang.String pasteFilesDirs(java.lang.String login, java.lang.String password, long toFolderId, boolean makeCopy, long[] fileIds, long[] dirIds)
Copy-pastes or cut-pastes a group of files and dirs. Use this to copy or move a group of files to another directory.
Parameters:
login - user login password - user password toFolderId - target folder id makeCopy - - exec copy+paste if true, exec cut+paste if false fileIds - ids of file to be moved/copied dirIds - ids of folders to be moved/copied
Returns:
diagnostic message or empty string if all ok
renameFile
public long renameFile(java.lang.String login, java.lang.String password, long fileID, java.lang.String newName)
Renames specified file
Parameters:
login - user login password - user password fileID - id of file to be renamed newName - new name of file
Returns:
-1 if file exists, 0 in case of other failures, fileID if rename was successful
renameFolder
public long renameFolder(java.lang.String login, java.lang.String password, long dirID, java.lang.String newName)
Renames specified folder
Parameters:
login - user login password - user password dirID - id of folder to be renamed newName - new name of folder
Returns:
-1 if file exists, 0 in case of other failures, dirID if rename was successful
restoreFile
public void restoreFile(java.lang.String login, java.lang.String password, long fileID)
Restores file from Recycle Bin. If folder still exists restores to it, in other cases will restore to special RESTORED FILES folder which will be created if not already exists.
Parameters:
login - user login password - user password fileID - id of file to be restored
restoreFiles
public void restoreFiles(java.lang.String login, java.lang.String password, long[] fileIDs)
Restores group of files from Recycle Bin. If folder still exists restores to it, in other cases will restore to special RESTORED FILES folder which will be created if not already exists.
Parameters:
login - user login password - user password fileIDs - Array of file ids to be restored
setFolderSharingProperties
public java.lang.String setFolderSharingProperties(java.lang.String login, java.lang.String password, long dirId, com.pmstation.shared.soap.api.SharedFolderProperties folderProperties)
Sets folder sharing properties
Parameters:
login - user login password - user password dirId - id of folder to set properties for folderProperties - new properties values
Returns:
Diagnostic message or empty string if all is ok
signup
public java.lang.String signup(java.lang.String login, java.lang.String password)
Creates new User and sends confirmation email.
Parameters:
login - desired login password - password
Returns:
error message if any. Empty string if all ok.
syncFinished
public void syncFinished(java.lang.String login, java.lang.String password, long fileId)
Should be called in the end of each sync operation
Parameters:
login - user login password - user password fileId - which file was synced. -1 if not applicable
uploadCancelFile
public void uploadCancelFile(java.lang.String login, java.lang.String password, long fileId)
Call if upload was canceled
Parameters:
login - user login password - user password fileId - id of file which upload is canceling
uploadFinishFile
public java.lang.String uploadFinishFile(java.lang.String login, java.lang.String password, long fileId, java.lang.String md5)
Complete resumable upload
Parameters:
login - user login password - user password fileId - returned from initial call to uploadStartFile() - existing file in 'being uploaded by parts' state md5 - original file MD5 to verify file consistency at server side
Returns:
empty string if success or error message
uploadStartedFileExists
public boolean uploadStartedFileExists(java.lang.String login, java.lang.String password, long fileId)
Checks if file was partially uploaded
Parameters:
login - user login password - user password fileId - id of file to be checked
Returns:
true if there is part of file already uploaded.
uploadStartFile
public long uploadStartFile(java.lang.String login, java.lang.String password, long dirID, java.lang.String name, long fullSize)
Resumable upload - start
Parameters:
dirID - (-1) means upload to user's root dir
Returns:
fileId to pass as parameter in all subsequent partial uploads
uploadStartFileUpdate
public long uploadStartFileUpdate(java.lang.String login, java.lang.String password, long updateFileId, java.lang.String name, long fullSize)
Update file
Parameters:
login - user login password - user password updateFileId - it of original file to be updated name - empty string means don't change existing name fullSize -
Returns:
id of temporary file uploading of which will cause update of original file